3

私はMVC PHPフレームワークCodeigniterを使用していますが、コントローラやモデルからredirect()を呼び出す場所について直接質問がありますか?MVCフレームワークのコントローラまたはモデル内からredirect()を呼び出す必要がありますか?

シナリオ:
ユーザーはwww.example.com/item/555に移動します。私のモデルでは、アイテムデータベースのID 555のアイテムを検索します。アイテムが見つかったら、その結果をコントローラに返します。しかし、アイテムが見つからなければ、私はどこかにユーザーをリダイレクトしたいと思う。 redirect()を呼び出すべきかどうかは、モデルまたはコントローラの内部から来るべきですか?どうして?

答えて

6

んが、あなたのモデルはfalseを返すべきではないと、あなたはそうのようなあなたのコントローラに確認する必要があります:

class SampleModel extends Model 
{ 
    //Construct 

    public function FetchItem($id) 
    { 
     $result = $this->db->select("*")->from("table")->where("item_id",$id)->get(); 
     if($result->num_rows() == 0) 
     { 
      return false; 
     } 
     //return result 
    } 
} 

とあなたのコントローラ内の操作を行います。データはいずれか一方のみの標準的な結果を返すために

function item($id) 
{ 
    $Item = $this->SampleModel->FetchItem($id); 

    if(!$Item) 
    { 
      redirect("class/error/no_item"); 
    } 
} 

モデルがありますキー/値オブジェクト、ブール値など

すべてのロジックはコントローラによって処理/制御される必要があります。

モデルはページ固有ではなく、アプリケーション全体でグローバルに使用されるため、別のクラス/メソッドでモデルを使用すると、サイトの別の部分として誤った場所にリダイレクトされる可能性があります。

+0

+1 ...あなたがリダイレクトをしなければならないところ、おそらくそれはだ...すでにコントローラに結果を返すしていると述べました。 – jmort253

+0

ありがとうRobertとjmort。これは、私が探していたまっすぐ前向きの答えです。 – justinl

+0

感謝する..ありがとう! – GianFS

1

コントローラーは通常モデル、ビュー、または場合によっては別のコントローラーへの呼び出しを委任するので、コントローラーはリダイレクトを呼び出すのに最適な場所だと思われます。

しかし、あなたのアプリケーションに最も合ったものを使用し、将来的には維持しやすいものを使用してください。また、理由のためにルールが存在すると考えてください。要するに、同僚があなたのコードにバグを修正しようとした場合、「合理的な人」の標準は何を言っていますか?ほとんどの人があなたのリダイレクトを探す可能性が最も高いでしょうか?私は私よりも良いこの回答が好き -

プラスは、あなたが

+0

.NET Guy by any chance :) – RobertPitt

+0

主にJ2EE/Javaはありませんが、私は大学でNETを学びました。 – jmort253

関連する問題