0

codeigniter のエラー処理について質問があります。私の最初の質問は、誰が show_error メソッドを呼び出す必要があるかということです。モデルかコントローラーかビューか?モデルはエラーが生成される場所であるため、この特定のケースのモデルに配置するつもりでしたが、ビジネスロジックのほとんどはコントローラーにあるため、そこで行うことにしました。しかし、これを行う「正しい」方法があるかどうか知りたいです。

私の2番目の質問はこれです。モデルには、データを返す関数とエラー メッセージを返す関数の 2 つの関数を追加しました。モデルを呼び出した後、コントローラーがエラー状態をテストし、それを表示しようとします。しかし、常に空です。

私のモデルは次のようになります。

    public function errormessage()
    {
        return $this->_emess;
    }
    public someotherfunction()
    {
         if ( $switch_obj->connect() )
        {
            $retdata = $switch->showInterfaceAll(); 
            $switch->disconnect();  
            $this->_data = $retdata;
            return true;
        }
        else
        {
            print 'debug: assigning error message in model:';
            $this->_emess = $switch->errormessage();
            print $this->_emess;
            return false;
        }
          }

次に、コントローラーには次のロジックがあります。

      if ($this->switches_model->someotherfunction($this->uri->segment(7) ) )
      {      
      $data['listofports'] = $this->switches_model->data;
      }
      else {
              print '<BR>in error path<BR>';
      show_error($this->switches_model->errormessage(), 123);
      }

モデルの debug print ステートメントから、エラー メッセージが設定されていることがわかります。しかし、コントローラが show_error() メソッドを使用して表示しようとするまでに、次のエラー メッセージが表示されます。

ステータス テキストはありません。ステータス コード番号を確認するか、独自のメッセージ テキストを入力してください。

モデルがすでに破棄されているためではないことを証明するために、モデルにデストラクタを追加して、デバッグ行を出力してみました...

    public function __destruct()
    {
      print 'in the destructor';
    }

「in error path」というメッセージは「in the destructor」の前に出力されるので、モデルはまだ健在であると想定しています...

任意の提案をいただければ幸いです。

ありがとう。

更新 1

問題が見つかりました。正当なステータス コードを渡す場合は、正当なステータス コードを渡す必要があります。カスタム ステータス番号を作成できると思っていましたが、HTTP コードである必要があります。しかし、誰が show_error() を呼び出すべきかについての質問 1 について誰かがコメントできれば、それは大歓迎です。ありがとう。

4

1 に答える 1

1

最初の質問に対する短い答えはノーです。「正しい」方法はありません。

あなたの質問では、次のように述べました。

私のビジネスロジックのほとんどはコントローラーにあるので、そこで行うことにしました。

これは議論の余地があり、おそらくこのサイトで行うべき議論ではありませんが、一般的に、コントローラーは他の何よりもディスパッチャーであることを意図していることがわかりました. したがって、コントローラーはできるだけ小さくする必要があります。そうは言っても、show_error() 関数は表示するビューも決定しているので、これをディスパッチ関数と呼び、コントローラーに配置します。その関数を使用しておらず、代わりに log_message() を使用してエラーをログに保存し、処理を続行している場合は、その関数を使用した後にプロセスを続行できるため、それをモデルに入れます。繰り返しますが、これは個人的な選択であり、どちらの場所でも実行できますが、それが私が通常見ている方法です.

于 2013-01-09T00:14:02.360 に答える