在我的zend项目中,我在header.phtml中有这个代码,它被加载到每个布局/视图中。它是一个基于用户会话设置div的函数的开始。我需要根据这些变量添加重定向。因此,用户尝试访问的任何页面(控制器)都将被重定向到计费控制器索引操作。我知道我可以在每个控制器索引操作中设置重定向,但这是很多代码。无论如何我可以将重定向添加到我的header.phtml中吗?
由于
<?php
$userSess= new Zend_Session_Namespace('Default');
if(isset($userSess->subscription_state) && isset($userSess->account_type)){
if($userSess->subscription_state == "unpaid" && $userSess->account_type == 1){
?>
答案 0 :(得分:2)
你正在做的事情可能在Front Controller Plugin中做得最好。
通过在布局中处理您的测试,您已经消耗了处理请求和呈现视图的成本,只是通过重定向将其丢弃。
相比之下,在调度周期的某个早期点执行这些检查 - 例如preDispatch()
- 您永远不必加载控制器并处理操作。
答案 1 :(得分:1)
我同意David Weinraub的观点。您可以在自己的Front Controller插件中执行此操作,例如:
<?php
class My_Controller_Plugin_Abc extends Zend_Controller_Plugin_Abstract{
public function preDispatch(Zend_Controller_Request_Abstract $request){
$userSess= new Zend_Session_Namespace('Default');
if(isset($userSess->subscription_state) && isset($userSess->account_type)){
if($userSess->subscription_state == "unpaid" && $userSess->account_type == 1){
$this->getResponse()->setRedirect("/index/login")->sendResponse();
}
}
}
}
在Bootstrap.php中注册插件
$frontController = Zend_Controller_Front::getInstance();
$frontController->registerPlugin(new My_Controller_Plugin_Abc());