在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似乎无法按照文档中的方式工作,因此,除非它被修复,或者您用自己的实现替换它,否则这实际上不是您的选项:)