Zend Framework 1.x是否可以在整个模块上禁用布局和渲染?

时间:2013-12-18 20:09:16

标签: php zend-framework

我有一个名为api的模块,我想平面禁用所有渲染和布局,只返回JSON。我知道我可以在控制器中禁用每个操作的布局,如下所示:

$this->_helper->_layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(TRUE);

但我怎么能在整个api模块上做到这一点?


解决方案: 把它放在它自己的控制器中,让所有其他控制器扩展它:

public function preDispatch() {
        $this->_helper->layout()->disableLayout(); 
        $this->_helper->viewRenderer->setNoRender(true);
    }

3 个答案:

答案 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)

也许您可以使用您的代码创建一个父控制器,所有模块控制器都将扩展。