Ant*_*nin 4 events json response event-listener zend-framework2
我正在尝试实现以下内容:
简单的控制器和动作.Action应根据请求返回2种类型的响应:
HTML in case of ordinary request (text\html),
JSON in case of ajax request (application\json)
Run Code Online (Sandbox Code Playgroud)
我已经设法通过控制器的插件来做到这一点,但这需要写
return $this->myCallBackFunction($data)
Run Code Online (Sandbox Code Playgroud)
在每个行动中.如果我不想对整个控制器做这个怎么办?试图找出如何通过事件监听器实现它,但无法成功.
任何提示或链接到一些文章将不胜感激!
ZF2具有专门用于此目的的可接受的视图模型选择器控制器插件.它将根据您通过查看客户端发送的Accepts标头定义的映射来选择适当的ViewModel.
对于您的示例,首先需要通过将JSON视图策略添加到视图管理器配置(通常在module.config.php)中来启用它:
'view_manager' => array(
'strategies' => array(
'ViewJsonStrategy'
)
),
Run Code Online (Sandbox Code Playgroud)
(很可能你已经有了一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
这将返回标准请求的正常ViewModel,以及接受JSON响应(即AJAX请求)的请求的JsonModel.
您分配给JsonModel的任何变量都将显示在JSON输出中.