2010-11-30 14 views
0

コントローラからビューが提供されている場合は、そのビューで生成されたデータを投稿経由で渡してモデルに直接渡すか、コントローラを介して戻る必要がありますビューを提供し、コントローラからモデルを呼び出しますか?コントローラからビューをモデルに渡すMVCの混乱

答えて

0

MVCに依存しないアプローチでは、モデルに戻るビューはcorrect approachです。純粋主義者は常にコントローラーに戻ると述べることがあります。

hereからのコメント...

モデルは(通常 ビューから)その状態についての情報 のリクエストに動作し、アプリケーションドメインの データ、 応答を管理し、応答 状態への指示(通常は コントローラから)。

「通常は」というフレーズが重要です。パターンは、ある程度下流の管理性と保守性のためです。時にはパターンは、維持可能で管理しやすい方法で目標を達成することに支障をきたし、時には過度に使用されることもあります。

私は、いずれのルートもこのインスタンス(小規模)でうまくいくとは思っていますが、アプリケーション全体でどのように問題に近づいているかについてもわかります。

+0

私はビューからモデルを呼び出しますか? – roger

+0

@Roger追加情報を追加しました... –

+0

ビューにあまり多くのコードを追加しなくても、ビューからモデルを呼び出す方法はまだわかりません。モデルでは、ビュー内の

から来るデータでSQLクエリを作成します。モデルを呼び出す前に、フォームがビューで送信されたことを本当に確認する必要がありますか? ビューに多すぎるコードがあるように感じます。 – roger

1

CodeIgniterビューでは、コントローラからデータを取得し、パラメータをデマルチプレクス/検証し、モデルから適切なデータを取得します。

  1. ビューが出力されます:それはすることが重要です。ビューは、HTML/XML/JSON/CSS(ページ、ページの論理部分、またはAPIやリソースなどの出力データの他の部分)を定義するため、モデルと直接結合されません。これは、CIのビューからモデルを呼び出さないことを意味します。

  2. コントローラはプロキシです。コントローラとモデルは出力を生成しません。コントローラはGET要求とPOST要求を受け取り、結果を出力するためにビューに必要な呼び出しを行います。多くの場合、パラメータをチェックし、複数のモデル呼び出しを多重化して適切なデータをすべて取得します。

  3. モデルはデータを取得して入れます。モデルは、モデルのデータオブジェクトとして、またはデータのより一般的な(ただし一貫性のある)ハッシュのいずれかとして、不可知論的な形式でデータを返す必要があります。返されたモデルデータがよりクリーンであれば、ビューとモデルの間での結合が少なくなります(モデルパーツの再利用が増えるほど)。

    • JavaScriptがしばしばビューに関連して終わる(と、通常のコントローラタスク、検証のようなものを行うことができます):CodeIgniterの中

は、あなたが重複を見つけることがいくつかの場所があります。 Javascriptをビューから移動することでこれを改善することができます(大きな部分ではうまく機能し、小さい部分ではうまく機能しません)。

  • PHPでは、戻り値ハッシュ(キー/値配列)がオブジェクトを返すより簡単です(コードは少なくなりますが、型の安全性は低下します)。これはしばしばカップリングの原因になります。
  • 共有出力のものは、しばしばコントローラに入り込みます(CIヘルパーライブラリに移動することで回避できます)。
  • 目標は、特定の仕様を満たすデータを受信することを除いて、モデルを認識しないようにすることです。コントローラはちょうど取得して置くだけで(HTML出力もデータにも直接アクセスしません)、モデルはほとんどがSQLや他の形式のデータを取得し、構造化されたものに詰め込んでいます。

    0

    はい、コントローラ機能にフォームデータを送信します。その関数はデータを処理し、ビューを呼び出します。

    これ以外の方法で試してみると、コードが完成します。

    1つの機能で、フォームの元の表示とそのフォームの送信を処理できます。

    フォームが送信されているかどうかを確認し、送信されている場合はそのデータを処理し、そうでない場合はフォームを表示します。

    function login(){ 
    
        if($this->input->post('submitted')==1){ 
    
        //process the form data 
    
        }else{ 
    
        //show the form 
    
        } 
    
    } 
    
    関連する問題