1

理想的な世界では、シングルトンに依存するべきではありません。コントローラー内のモデルとビュー内のモデルは、2 つの異なるインスタンスになります。コントローラーが状態を設定し、ビューの表示がその状態に依存する場合に問題が発生します。例えば:

  class MyController extends Controller {

    public function __construct(ModelUsers $cModel)
    {
      $this->model = $cModel;
    }

    public function action_Search($username) {
      $this->model->filterByUsername($username);
    }
  }

  class MyView extends View {

    public function __construct(ModelUsers $vModel)
    {
      $this->model = $vModel;
    }

    public function users() {
      return $this->model->getUsers();
    }
  }

コントローラーモデルとビューモデルの間でデータを共有する方法は?

4

2 に答える 2

2

基本から始める

ビューは、ユーザーへの出力表現を生成するために必要な情報をモデルから要求します。

これは、ビューが情報を表示することのみを担当する必要があることを意味します。そのためだけに。トリミング、テキスト サイズの変更なども実行できますが、そこでカウントを行ったり、より複雑な操作を行ったりしないでください。

モデルは、状態が変化したときに、関連付けられているビューとコントローラーに通知します。この通知により、ビューは更新された出力を生成し、コントローラーは使用可能なコマンドのセットを変更できます。

モデルはデータ操作を担当する必要があります。たとえば、データベースからレコードを取得するために使用できます。データ処理を担当するだけです。

コントローラーは、関連付けられたビューにコマンドを送信して、モデルのビューの表示を変更できます (ドキュメントをスクロールするなど) 。また、モデルにコマンドを送信してモデルの状態を更新することもできます (ドキュメントの編集など)。

コントローラーは、モデルとビューの間の一種のプロキシです。そこにパラメーターがあり、このパラメーターに従って、コントローラーの適切なアクションを設定します。このアクションは、正しいモデル オブジェクトを作成し、それを使用してデータを取得し、ビューに割り当てる必要があります。

モデルでシングルトンを使用したことはありません。MVC 構造に役立ついくつかのクラスが必要な場合は、ヘルパーを使用でき、Hast が提案したレジストリパターンを使用できます。私はシングルトンを使うのが好きではありません。

シングルトンを使用する場合も参照してください。

だからあなたの質問。

  • コントローラー -> モデル = モデルのメソッドの引数を介してデータを渡す
  • モデル -> コントローラー = 参照の場合は処理し、引数の場合は何かを実行して結果を返す
  • コントローラー -> ビュー = 表示する適切なデータを割り当てます。
  • View->controller = 特別な URL に移動してデータを作成するか、ajax リクエストを使用してデータを取得します。
于 2013-07-17T07:29:48.077 に答える
0

代わりに、 RegistryまたはDependency Injectionを使用できます。

また、場合によっては、一部のデータをビュー クラスに配列として渡すこともあります。このような:

  class MyView extends View {
    private $data = array();

    public function __construct($data)
    {
        $this->data = $data;
    }

    public function users() {
      return $this->data['model']->getUsers();
    }
  }

もちろんView、コントローラーからクラスを呼び出すとき (または呼び出しを行う場所) にモデルを渡す必要があります。

于 2013-07-17T07:22:28.653 に答える