我有一个名为api
的模块,我想平面禁用所有渲染和布局,只返回JSON。我知道我可以在控制器中禁用每个操作的布局,如下所示:
$this->_helper->_layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(TRUE);
但我怎么能在整个api
模块上做到这一点?
解决方案: 把它放在它自己的控制器中,让所有其他控制器扩展它:
public function preDispatch() {
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
}
答案 0 :(得分:2)
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);
}
}
答案 1 :(得分:1)
创建插件并添加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);
}
从现在开始,模块'messages'将禁用布局和视图。
答案 2 :(得分:0)
也许您可以使用您的代码创建一个父控制器,所有模块控制器都将扩展。