根据会话变量重定向用户登录

时间:2011-10-21 06:24:03

标签: php zend-framework session redirect

在我的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 个答案:

答案 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());
相关问题