我有一个名为api
的模块,我想完全禁用所有渲染和布局,只返回JSON。我知道我可以像这样在控制器中禁用每个操作的布局:
$this->_helper->_layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(TRUE);
但是我怎样才能在整个api
模块上做到这一点呢?
溶液:把它放在它自己的控制器中,并让所有其他控制器扩展它:
public function preDispatch() {
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
}
class My_Controller_Action extends Zend_Controller_Action
{
public function init()
{
$this->_helper->_layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(TRUE);
}
}
class Api_IndexController extends My_Controller_Action
{
public function viewAction()
{
// data to return
$data = array();
$this->_helper->json($data);
}
}
创建插件并添加preDispatch()
方法,如下所示:
public function preDispatch(Zend_Controller_Request_Abstract $request)
if ($request->getModuleName() === 'messages') {
Zend_Layout::getMvcInstance()->disableLayout();
Zend_Controller_Action_HelperBroker::getExistingHelper('viewRenderer')->setNeverRender(true);
}
从现在开始,模块"消息"将禁用布局和视图。
也许你可以用你的代码创建一个父控制器,你的所有模块控制器都将扩展。