2011-10-21 57 views
1

在我的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){ 
     ?> 

回答

2

那种你正在做的可能是做在Front Controller Plugin最好的事情。

通过在布局中处理您的测试,您已经吃掉了处理请求和渲染视图的成本,只是通过重定向将其扔掉。

相反,在调度周期的某个早期阶段(例如preDispatch())执行这些检查时,您不必加载控制器并处理该操作。

1

我同意David Weinraub。你可以在自己的前端控制器插件,例如这样做:

<?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()); 
注册插件
相关问题