取消Zend Framework自动渲染视图

Zend Framework在调用完一个Action后,会自动去寻找并且显示相应的视图文件。因此在第一个Hello World的例子中,为了直接在控制器的Action中输出“Hello World”,在echo语句后用了一个die(),显得很不美观:

class IndexController extends Zend_Controller_Action{
public function indexAction(){
echo 'Hello World!';
die();
}
}
?>
显然,有些时候并不需要Zend Framework这样“自作主张”,因此需要取消它自动加载视图的功能。

Zend_Controller_Front类有一个setParam方法可以用来设置前端控制器的一些参数。要取消Zend Framework的自动加载视图的功能,可以在整个应用程序的入口文件处设置“noViewRenderer”参数的值为“true”:

$frontController=Zend_Controller_Front::getInstance();
// ....
$frontController->setParam('noViewRenderer',true);
这样,所有的Action方法在执行完后都不会自己去加载视图。

如果只是要在某一个控制器内取消这个特性,可以在控制器的init方法或者preDispatch方法内调用

$this->_helper->viewRenderer->setNoRender();
例如:

public function preDispatch(){
$this->_helper->viewRenderer->setNoRender();
}
再进一步,如果只是想在某个Action方法中取消自动加载视图,把上面的setNoRender()放在相应的函数里面就行了。

Comments