ZF2查看策略

时间:2013-08-30 13:39:40

标签: json events zend-framework2 response event-listener

我正在尝试实施以下内容:

简单的控制器和动作。 Action应根据请求返回2种类型的响应:

HTML in case of ordinary request (text\html),
JSON in case of ajax request (application\json)

我已经设法通过控制器的插件来实现这一点,但这需要写入

return $this->myCallBackFunction($data)

在每个动作中。如果我不想对整个控制器做这个怎么办?试图找出如何通过事件监听器实现它,但无法成功。

任何提示或链接到某篇文章都将不胜感激!

1 个答案:

答案 0 :(得分:5)

ZF2具有专门用于此目的的acceptable view model selector控制器插件。它将根据您通过查看客户端发送的Accepts标头定义的映射来选择适当的ViewModel。

对于您的示例,首先需要通过将JSON视图策略添加到视图管理器配置(通常在module.config.php中)来启用JSON视图策略:

'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输出中。