ZF2 具有专门用于此目的的可接受的视图模型选择器控制器插件。它将根据您通过查看客户端发送的 Accepts 标头定义的映射来选择适当的 ViewModel。
对于您的示例,您首先需要通过将 JSON 视图策略添加到视图管理器配置(通常在 中module.config.php
)来启用它:
'view_manager' => array(
'strategies' => array(
'ViewJsonStrategy'
)
),
(很可能您已经有一个 view_manager 键,在这种情况下,将“策略”部分添加到您当前的配置中。)
然后在你的控制器中调用控制器插件,使用你的映射作为参数:
class IndexController extends AbstractActionController
{
protected $acceptMapping = array(
'Zend\View\Model\ViewModel' => array(
'text/html'
),
'Zend\View\Model\JsonModel' => array(
'application/json'
)
);
public function indexAction()
{
$viewModel = $this->acceptableViewModelSelector($this->acceptMapping);
return $viewModel;
}
}
这将为标准请求返回一个普通的 ViewModel,为接受 JSON 响应的请求(即 AJAX 请求)返回一个 JsonModel。
您分配给 JsonModel 的任何变量都将显示在 JSON 输出中。