0

ViewModel「一般的な」アプリケーションでは、コントローラーはオブジェクト内のデータをビューに転送します。そこで、出力用に準備することができます。

 `id`                       -> `/foo/bar/` . `$course->id`                  -> `link`
 `firstname` and `lastname` -> `$course->name`                              -> `name`
 `date`                     -> `AgeHelper(`$course->date`)` . ' years old.' -> `age`
 etc. ...

現在、RESTful アプリケーションを開発していて、このビュー レベルがありません。現在、次のように機能しています。

コントローラ

public function get($id)
{
    $course = $this->getCourseTable()->findOnceByID($id)->current();
    $viewModel = $this->acceptableViewModelSelector($this->acceptCriteria);
    $viewModel->setVariables(array('data' => array(
        'id'             => $course->id,
        'created_at'     => $course->created_at,
        'details'        => $course->details,
    )));
    return $viewModel;
}

しかし、それは浅いデータ構造に対してのみ十分です。のためにデータをどこで処理/準備する必要がありViewModelますか?

  • コントローラ?いいえ、コントローラーにはありません。
  • モデル?モデル テーブルまたはマッパー クラスにありません。
  • 意見?いいでしょうが、景色はありません。

それで、どこ?

ありがとう

4

1 に答える 1

2

JSON は主に生データの転送に使用され、HTML のレンダリングと比較して、ビュー スクリプトの形式でこの追加の「プレゼンテーション」レイヤーを使用することが理にかなっています。コードを見ると、テーブル ゲートウェイ パターンを使用してエンティティを取得しているように見えます。したがって、ここにこれらのオプションがあると思います:

  • JsonModel を返し、行オブジェクトから生データのみを渡し、必要に応じて JS/その他のアプリケーションでそれらをフォーマットできるようにします
  • JsonModel を返し、いくつかの「ヘルパー」TableGateway または RowGateway メソッドを使用してコントローラーで事前にフォーマットされたデータを渡すか、これを行うためにいくつかのコントローラー プラグインの実装を検討することをお勧めします。
  • JsonModel を返し、実装した TableGateway::toJson($row) や RowGateway::toJson() などのメソッドを使用して、フォーマットされたデータを渡します。
  • 通常の HTML テンプレートの場合と同様に、ViewModel を返し、エンティティをビュー スクリプトに渡します。ビューヘルパーを使用して、必要に応じて出力をフォーマットできます。次に、Zend\View\Helper\Json ビュー ヘルパーを使用して、'application/json' 応答をデータに設定します --- 注: Json ヘルパーは、ドキュメントに記載されているように機能しないようです。修正されるか、独自の実装に置き換えるまではこれは本当にあなたのためのオプションではありません:)
于 2013-06-25T13:15:55.860 に答える