在Zend Framework 2 RESTful应用程序中,哪里可以/应该为输出预先准备数据?

在Zend Framework 2 RESTful应用程序中,哪里可以/应该为输出预先准备数据?,rest,model-view-controller,zend-framework2,viewmodel,restful-architecture,Rest,Model View Controller,Zend Framework2,Viewmodel,Restful Architecture,在“通用”应用程序中,控制器将ViewModel对象中的数据转发到视图。在那里,它可以为输出预先准备,例如 `id` -> `/foo/bar/` . `$course->id` -> `link` `firstname` and `lastname` -> `$course->name` -> `name` `date

在“通用”应用程序中,控制器将
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;
}
但它只适用于浅层数据结构。对于
视图模型
,应在何处处理/预处理数据

  • 控制器?不,不在控制器中
  • 模特儿?不在模型表或映射器类中
  • 风景?那太好了,但是没有风景
那么,在哪里


与呈现HTML相比,JSON主要用于传输原始数据,在呈现HTML时,以视图脚本的形式提供这个额外的“表示”层是有意义的。查看您的代码,您似乎正在使用表网关模式来检索实体。 因此,我相信您在这里有以下选择:

  • 返回JsonModel并只传递来自row对象的原始数据,并让JS/other应用程序根据需要对其进行格式化
  • 返回JSONMODEL并在控制器中使用一些“帮助器”TabraseWoad或RooGeor方法预先格式化数据,或者您可能需要考虑实现一些控制器插件来实现这一点。
  • 返回JsonModel并使用您实现的TableGateway::toJson($row)或RowGateway::toJson()等方法传递格式化数据
  • 返回ViewModel,并像使用普通HTML模板一样将实体传递给查看脚本。可以使用视图帮助器根据需要格式化输出。然后使用Zend\View\Helper\Json View Helper对数据设置“application/Json”响应——注意:Json Helper似乎无法按照文档中的方式工作,因此,除非它被修复,或者您用自己的实现替换它,否则这实际上不是您的选项:)