Zend Framework MVC重定向到不同的控制器和动作

时间:2010-10-26 14:12:25

标签: php zend-framework zend-controller zend-session

我正在尝试解决如何停止zend或重定向zend以转到不同的zend控制器和操作,如果启动带内的检查失败。

例如,get变量不存在或者更可能是会话不存在,这意味着用户必须登录。

因此用户最初请求了索引/某些操作

但我想让他们去登录/索引

在我的引导带中,我会放置条件,然后更改控制器操作以查看。

如果我以非标准的方式这样做,任何人都可以指导我阅读最佳实践的文档吗?

zend新手

3 个答案:

答案 0 :(得分:4)

来自Zend documentation (Dispatcher)

// forward to an action in another controller:
// FooController::bazAction(),
// in the current module:
$this->_forward('baz', 'foo', null, array('baz' => 'bogus'));

答案 1 :(得分:4)

我建议您使用插件进行每页访问检查,并登录创建身份验证控制器。

在这里,您将了解如何执行此操作http://alex-tech-adventures.com/development/zend-framework/61-zendauth-and-zendform.html

一个例子:

class Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract 
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        // ...

        if(!$auth->hasIdentity())
        {
            $request->setControllerName('authentication')
                 ->setActionName('login');
        }
    }
}

答案 2 :(得分:2)

我通常不会将身份验证放在bootstrap中,它应该拥有自己的控制器。

创建一个AuthController()来设置您的身份验证适配器并设置您的实例。

然后在一个公共视图中(对于安全页面),只需检查您的实例:

$auth = Zend_Auth::getInstance();     
if(!$auth->hasIdentity())      
{
#re-direct to login page
}