2

私は小さなPHPMVCを構築していますが、コーディングの小さな領域で壁にぶつかりました。「部分ビュー」が必要だと思いますが、既存のコードで何かを達成できるかもしれません。

現在最も単純な形式の私のコントローラー:

  • オブジェクトをインスタンス化します
  • POST変数が設定されているかどうかを確認します
  • 必要に応じてビュー1またはビュー2を表示します

現在のビュー:

  • HTMLマークアップを表示します
  • モデルを使用してエコーし、getUserInfo()などの関数を取得します

すべてがうまく機能していますが、コードはコントローラーとビューの両方でかなり大きくなり、メインビュー(1と2)内に「モジュール」またはサブビューを含める必要がある状況になりました。

たとえば、view2がロードされている場合、別のビュー、たとえば3部構成のサインアップ登録フォームを(view2の一部として)表示する必要があります。この登録フォームには、独自のコントローラーファイルも付属しています。

私はこのようなことを行うことができます。これはうまくいき、私がやろうとしていることのいくつかのアイデアをあなたに与えるでしょうが、これはMVCデザインパターンを壊すことを認めます。

意見

<div id="mydiv">Some content</div>
<div id="mysignup"> <?php include('controller_signup.php'); ?></div>
<div id="content"> The views main page content </div>

次に、ビューがコントローラーから適切な場所に引き込まれます。

前述のように、部分ビューを使用する必要があると思いますが、私が見つけた情報のほとんどはASPに関するものであり、少し迷っています。

これはかなり一般的な問題だと思っていたので、明らかな解決策があると思います。

ありがとう!

4

2 に答える 2

2

テレシュコに同意するとは言えません。別のビュー クラスにプレゼンテーション ロジックを配置する方が適切に思えるかもしれませんが、複雑さがさらに増すことになります。多くの場合、この追加のレイヤーは必要ありません。多くの場合、ビューは注入したモデルやデータを直接レンダリングできます。したがって、モデルをコントローラーからテンプレートに渡すだけの空の View クラスになります。

テンプレートの概念を導入しなくても、単純な MVC で非常に複雑な (そして保守可能な) Web サイトを作成できます。

サブビューを処理するには、メイン ビューからサブビューにデータを挿入するだけで済みます。これはコントローラーに対して透過的である必要があります (レンダリング方法を気にせずにメイン データを提供するだけです)。したがって、実際には、次のようにすることができます。

コントローラ:

public function someAction() {
    // ...
    $view = new View('name');
    $view->data = $someList;
}

意見:

<?php foreach ($someList as $item): ?>
    <?php echo (new View('subview', $item))->render();
<?php endforeach; ?>
于 2012-08-07T14:54:51.420 に答える