我的 Zend Framework 项目中需要一个控制器,它应该只处理 ajax 请求。
我目前的方法是扩展 Zend_Controller_Action:
class Ht_Ajax_Controller extends Zend_Controller_Action{
public function preDispatch(){
$this->getResponse()->setHeader('Content-type', 'text/plain')
->setHeader('Cache-Control','no-cache');
$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout()->disableLayout();
}
public function outputJson($data){
$this->getResponse()->setBody(json_encode($data))
->sendResponse();
exit;
}
}
不过,我知道这不是在 Zend Framework 中执行此操作的推荐方法。所以这就是为什么我要问,如何以 Zend 的方式做到这一点?
我首先想到的是制作一个控制器插件,但是如何才能轻松注册这个插件呢?引导程序不是选项,因为我只需要特定控制器。并且在很早的状态下将其注册到控制器内部似乎不太干净。
那么我应该如何实现我的 Ajax 控制器呢?我也知道有扩展的上下文切换助手,但是我认为这种方式对于仅设置内容类型等来说开销太大。
markus https://stackoverflow.com/users/11995/markus解释了最“Zend Like”的方式,他的解释是正确的。但您认为它的开销太大,因为他错过了向您展示“json 上下文切换”对于您的情况最适合的程度。
看看它有多短:
//In your controller, activate json context for ANY called action in once
public function init(){
$action = $this->_getParam('action');
$this->_helper->getHelper('contextSwitch')
->addActionContext($action, 'json')
->initContext();
}
就这样,您不需要任何视图脚本,您通过分配的所有变量$this->view
将被序列化为 JSON 对象。
哦,您不想在网址中添加上下文吗?好的,只需在您的路由中默认激活它即可
routes.ajax.route = '/ajax/:action/*'
routes.ajax.defaults.controller = ajax
routes.ajax.defaults.action = index
routes.ajax.defaults.format = json
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)