加载前控制器插件时如何确定路由信息?

时间:2010-01-25 16:48:28

标签: zend-framework

我最近在我的应用程序中添加了一个管理模块。此应用程序具有与主站点的单独身份验证(管理工具可能稍后在不同站点上用于不同的应用程序,管理员用户存储在单独的表中),这会导致问题。由于Zend_Auth的单例特性,我在关键时刻覆盖了我的Zend_Auth实例,并炸毁了我的应用程序。所以......

我想尝试确定引导程序中正在请求哪个模块,并仅加载适当的前端控制器插件。有没有办法确定在此执行点正在请求哪个模块,还是有更好的解决方案?怎么样?下面是bootstrap中初始化前端控制器插件的方法。

受保护的功能_initFrontControllerPluginWithOptions()     {         $这 - >自举(阵列( 'frontController',                                “资源加载”,                        “会话”,         ));

    //get site specifics 
    $sessionInfo = $this->getOption("resources");

    if ($namespace = $sessionInfo['session']['name']) {
        $data = array("cookieName" => $namespace);
    } else {
        throw new Exception("Authplugin can't find session namespace");
    }

    $frontController = $this->getResource("frontController");

    //register plugins
    $frontController->registerPlugin(new GS_Admin_Plugin_Auth_Admin($data));
    $frontController->registerPlugin(new GS_Model_Plugin_Auth_User($data));
}

1 个答案:

答案 0 :(得分:0)

这不能直接回答你的问题,但我过去处理这种情况的一种方法是为应用程序提供多个入口点,即2个或更多index.php文件。在每个不同的index.php中,您可以设置一个带有定义的标志,该定义指出程序从哪里进入。基于此,您可以加载不同的控制器插件。

为公用文件夹设置的示例可能是:

/index.php
/admin/index.php

从这两个方面你仍然会调用相同的Bootstrap类。