9

簡単なログインフォームのデータフローは次のとおりです。

ユーザーアクセスコントローラーのPHPファイル。コントローラにはmodel.phpとview.phpが含まれています

ユーザーがフォームを送信し、コントローラーがPOSTデータをモデルメソッドに送信し、結果を返します。

ユーザーはログインし、コントローラーによって別のビュー(ログイン成功メッセージ)に転送されます。

現在、私のビューは静的HTML(PHPなし)なので、ここに私の質問があります。次に、「こんにちは、クレイグ!」などのウェルカムメッセージをユーザーに渡す正しい方法は何ですか。

ビューはPHPスニペットを許可されていますか?

<?php echo $username; ?> 

モデルはコントローラーファイルでモデルの前にロードされるので?

ありがとう!

編集:ビューが特定のクラスメソッドにアクセスできるようにする方が良い方法ですか?

<?php $user->getUsername(); ?>

単なる変数ではなく?


他の回答に基づいて、私はあなたも興味があるかもしれない非常に有用な記事を見つけました。

http://www.nathandavison.com/posts/view/7/custom-php-mvc-tutorial-part-5-views

4

2 に答える 2

19

考慮しなければならないことがいくつかあります。

  • PHPで従来のMVCを実行することはできません。代わりに、MVCに触発されたパターンがあります
  • Webに実装した場合、ビューインスタンスとコントローラーインスタンスの間には1:1の関係があります。
  • MVCのモデルはクラスではありません。それは多くの異なるクラスを含むレイヤーです
  • ビューはダムテンプレートではなく、プレゼンテーションロジックを処理するクラスのインスタンスです。

WebベースのMVCで表示

上記のように、MVCおよびMVCに触発されたパターンのビューは、プレゼンテーションロジックを担当します。これには、エラーメッセージの表示やページ付けなどが含まれます。これを行うために、各ビューは複数のテンプレートを処理できます。

ビューはモデルレイヤーから情報を受け取り、それに応じて動作します。モデルレイヤーからの情報がビューに表示される方法は、MVC風のパターンの最も重要な違いの1つです。

  • 古典的なMVCパターン

    モデルの状態が変更された場合、モデルレイヤーの構造は情報を表示に送信します。これは、オブザーバーパターンを介して行われます。

  • Model2MVCおよびHMVCパターン

    ビューはモデルレイヤーに直接アクセスでき、モデルレイヤーから情報を要求できます。これは元のパターンに最も近いものです。

  • MVVMおよびMVPパターン

    Viewはコントローラーを介して情報を受け取り、コントローラーはモデルレイヤーから情報を要求します。パターンのさらなる違いは、データを表示に渡す前にデータをどのように処理するかに起因します。

あなたが今持っているように見えるのは、実際には単なるテンプレートです。1つと同様に、この記事で説明されています。最終的には、プレゼンテーションロジックを含める場所がない構造になります。長期的には、これによりプレゼンテーションロジックがコントローラーにプッシュされます。

では、その「ようこそ」メッセージはどうでしょうか。

ウェルカムメッセージを表示するには、ビューでモデルレイヤーに現在のユーザーの名前を要求する必要があります。モデルレイヤーが何らかのエラー状態を返した場合は、エラーメッセージテンプレートを表示してレイアウトに挿入します。

ユーザーの名前がモデルレイヤーから問題なく取得された場合は、挨拶を含むテンプレートを表示して選択し、テンプレートに値を設定してレンダリングします。

パーツはどのような順序でロードする必要がありますか?

コントローラーがモデルとビューを初期化する必要があるという考えは、Web用のMVCの非常に原始的な解釈に由来します。静的なWebページにMVCを直接移植しようとしたページコントローラーとして知られるパターン。

私の意見では、これは順序である必要があります:

  1. モデル

    構造を初期化し、それを介してモデルレイヤーを処理します。Authenticationほとんどの場合、ログイン用のサービスやドキュメントを処理するためのサービスなどを構築できる、ある種のサービスファクトリになりLibraryます。そういうもの。以前、モデルレイヤーの構造について少し長いコメントを書きました。あなたはそれが役に立つと思うかもしれません。

  2. 意見

    ルーティングメカニズムから収集した情報に基づいてビューインスタンスを作成します。Model2またはHMVCを実装している場合、ビューにはコンストラクターにServiceFactoryインスタンスが必要です。

    MVVMまたはMVPを実装している場合、ビューのコンストラクターには特別な要件はありません。

  3. コントローラ

    これは、作成する最後の構造です。これは、コントローラーがビューレイヤーとモデルレイヤーの両方にコマンドを送信する役割を果たし、コマンドが変更されてから両方の状態が変更されるためです。したがって、コントローラーはコンストラクターでビューファクトリとサービスファクトリの両方を受け取ることを期待する必要があります。

MVCの基本要素が初期化されたら、コントローラーでメソッドを呼び出し、現在のビューをレンダリングします。

これは非常に単純化された説明であることに注意してください。

于 2012-07-27T15:38:29.513 に答える
9

本当に好きなものをビューに入れることができますが、MVCのやり方をよりよく順守するには、ビュー内のPHPを単純なechosまたはprintsに制限する必要があります(おそらく本当に小さなループですが、それらも可能です)コントローラ/モデルで事前に計算されています)。それが動的コンテンツを取得する唯一の方法であるため、許可されていないと言うのは少しばかげています。

ビューのアイデアは、よりHTMLのルックアンドフィールを持たせることです。これにより、フロントエンドの開発者やPHPを知らない人でも、混乱することなくファイルを簡単に操作できます。

アップデート

一般的なMVCの詳細については、次のいずれかを参照してください(チュートリアルはたくさんあります)。

http://blog.iandavis.com/2008/12/09/what-are-the-benefits-of-mvc/

http://php-html.net/tutorials/model-view-controller-in-php/

http://www.tonymarston.net/php-mysql/model-view-controller.html

MVCを使用したPHPの具体的な例を確認するには、より優れたフレームワーク(CodeIgniterSymfonyDrupalなど)をダウンロードして、コードを確認することをお勧めします。それがどのように機能するかを理解してから、単純な記事ベースのシステムの機能を再作成してみてください。

于 2012-07-27T13:53:47.197 に答える