2011-07-14 11 views
2

PHPでMVCアプリケーションの正しい構造とプロセスフローを明確にするのに役立つ必要があります。PHPのMVCモデル - 正しい処理順序と分離

現在のところ、私の処理の大部分はビューが完了している(または少なくとも開始されている)ため、コンセプトは間違っていると思います。 - 私が働いている会社からこのような考え方を引き継いだのですが、今はMVCモデルを正しく理解しているとは思えません!

がそれを見た、再び私は(非常にbasicly)は次のようproccessがあるべきだと思う:

  • ユーザーのアクションはコントローラー
  • 任意のモデルを使用してこれらのアクションは
  • を必要なコントローラプロセスに送られ、
  • [コントローラは、それにreleventビューをインスタンス化し、必要なデータを渡し
  • Viewは、ユーザー
01にページをレンダリング


ビューに実際の機能があるかどうかを判断するのにもいくつかの困難があります。

つまり、ページデータを保持し、必要なテンプレートファイル(ヘッダー、ページ、フッターなど)をロードするためのラッパーか、データのレンダリング(つまりHTMLの準備とHTML出力)の機能は景色?


もう一つの問題は、コントローラがモデルに「引き渡す」とモデルは、DBのナイトクラブのドアにバウンサーのような役割を果たし、そして我々はじゃないように、実際のDBconn(とは何の関係もないんですまたはコントローラがDBconnを所有していて、必要なときにモデルに貸し出すだけですか?


誰もが提供できるヘルプやアドバイスは本当にありがたいです。

おかげ


編集 - 私はthisが役に立ったと評価してい!

答えて

2

私はあなたの最後の二つの質問にanswyerます:

1)ビューは、セキュリティ上の問題を回避またはオブジェクトのリストから始まるHTMLテーブルを表示するには、値をエスケープ例えば、基本的な出力機能を持っている必要があります。別の責任は、ラベルと他の定数値の変換です(たとえば、$ this - > _( 'Your label')を持つことができます。function _($ val)は、開始する文字列を翻訳するすべてのビュークラスに含まれる関数ですCSVファイルから)。

2)複雑さのアプリケーションによっては、モデルレイヤーに2つのサブレイヤーを持つことができます。上位レイヤは、エンティティの機能を備えた古典的なモデルです。下位レベルは、db操作を実行するリソース・モデル・クラスです。また、DAOパターンを実装するモデルで単一のレイヤーを持つこともできます。とにかく、コントローラはDB接続とは何の関係もないはずです。

+0

ありがとうございました!あなたの二番目の答えは、私が思ったものです。しかし、あなたの最初のことを明確にするだけです。ビューはフォーマットや出力のためにデータを処理する必要があります。コントローラは、データの配列(ショップアイテムなど)を渡し、ビューをループしてHTMLを生成します。 – Chris

2

あなたの箇条書きの仮定は正しいです:)。 MVCの主な考え方は、ルーズカップリングとコンポーネント間の互換性です。ご質問にお答えするために

をビューには、唯一のプレゼンテーションも、そのビューでモデルのリストを反復処理して出力することは罰金がありますが、ビュー内のデータを処理することはないはずです。

コントローラとビューについては、モデルでは何も想定しないでください。データベースからデータを取得するモデルと、別のタイプのデータソースからデータを取得するモデルに切り替えるのは簡単です。これは、コントローラの変更を決定するものではありません。 Fabrizioがそうだ、DAOパターンを調べるべきである。

実際にMVCを実装するフレームワークを見てみることをお勧めします。特にSpring - あなたがJavaの人でなくても、実装はとてもきれいです - 、Rails、Symfony。よりエキゾチックなものについては、Djangoを見てください。

+0

Fabrizioさんの答えは、最初にパンチをしてから受け入れてくれましたが、本当にありがとうございます。 (あなたに+1)私はCodeIgniterとCakePHPを見てきました。彼らのウェブサイトからのシンフォニーの表情が気に入っていますが、まだそれを使用していません。私が働くところでは、私はカスタムフレームワークを構築しなければなりませんでした。 - 再度、感謝します! – Chris

関連する問題