5

私はPHPが初めてで、MVCについて読んだことがあります。現在、私はフレームワークを使用しておらず、コントローラーからビューにデータをプッシュする方法を知りたいです。

バックグラウンド:

  1. htmlForm1.php -> 入力を取得し、データを DoWork.php に渡して処理します
  2. DoWork.php -> 作業を行い、htmlForm2.php に渡して表示します
  3. htmlForm2.php -> 結果表示

_GET を介して DoWork.php の値を (htmlForm1.php から) 取得することを理解しています。私の質問は、htmlForm2.php で (DoWork.php から) 値を取得するにはどうすればよいですか?

セッションを使用することを考えましたが、これが唯一の解決策ですか? htmlForm2.php の後、このデータを永続化する必要はありません

4

3 に答える 3

5

技術的に言えば、ビューはモデル データを直接要求できます。

MVC

モデルをビューに接続する点線は、まさにその接続です。

しかし、MVC Web 指向は、リクエストごとに実行されるため、一般的な MVC アプローチとは異なります。Web の外で MVC について話すとき、ビューにはデータを取得して出力するだけでなく、他の多くの機能があります。ビューはモデルに直接接続し、ロード後にデータを要求し、コントローラーでアクションをトリガーすることもできます (ビュー内の特定のイベント)。完全な新しいリクエストを実際にロードし、完全な新しいレスポンスを取得しないと、HTML のみでは達成できないこと (Javascript をオフにすることができるため、使用できません)。アプリケーションの HTML 部分は、現時点では、要求の静的な出力として設計されているため、ダム テンプレートのままです。

ほとんどの PHP Web フレームワークは、ビューをテンプレートとして扱います。私は (IMHO)、これがこのコンテキストに対する最善かつ明確なアプローチだと思います。そのようにして、ビューを応答として送信すると、コントローラーから変数をビューに簡単に送信できます。

$view = new View('view/myView.php');
$view->assign('a' => 'b');

次に、ビュークラス内でextract()、実際のビューファイルを含める前に、割り当てられた変数の配列内の変数だけを使用します。

于 2013-01-26T04:42:45.717 に答える
2

コントローラーがビューインスタンスにプッシュする必要がある唯一の情報は、ユーザー入力です (その場合でもまれなケースのみ)。

代わりに、ビューはサービスを介してモデル レイヤーから情報を要求する必要があります。コントローラーは、ユーザー入力に基づいて、モード層の状態を変更することを主に担当します。これもサービスを通じて行う必要があります。

これを実現するには、コントローラーとビューが同じモデル レイヤーにアクセスできる必要があります。ServiceFactoryこれは通常、両方のインスタンスに何らかの種類を注入することによって行われます。その後、ファクトリは、コードをグローバルな状態に依存させることなく、すべてのサービスが 1 回だけインスタンス化されるようにします。

PS:ビューはダム テンプレートではありません。これらは、アプリケーションの UI ロジックを担当するクラスです。これらは、MVC が Web のコンテキストで使用される場合に、ユーザーへの応答を作成するものです。

PPS:モデルはクラスでもオブジェクトでもありません。これは、MVC の 2 つのレイヤーの 1 つです。もう 1 つのレイヤーは、コントローラー、ビュー、テンプレートがあるプレゼンテーション レイヤーです。モデル レイヤーは主に 3 つの主要なグループで構成され、それぞれがレイヤーの 1 つの特定の側面 (アプリケーション ロジック、ドメイン/ビジネス ロジック、およびストレージ ロジック) を担当します。

于 2013-01-26T11:01:57.047 に答える
0

選択は、セッション、http (post/get)、またはデータベースに要約されます。

最も一般的には、フォームはそのデータをコントローラーに送信し、コントローラーはそのモデルを介してデータを実行し、おそらくテーブルに保存されて終了します。

その後のページでは、セッション/Cookie に保存された user_id などに基づいて、モデルからデータを呼び出します。

于 2013-01-26T03:51:30.220 に答える