【问题标题】:Zend Framework: Module Name in BootstrapZend 框架:Bootstrap 中的模块名称
【发布时间】:2011-01-31 14:45:56
【问题描述】:

我需要知道如何在我的 zend 应用程序的引导文件中获取当前模块名称。在页面加载时,我正在向 Web 服务发出请求,以通过发送散列 cookie 和令牌来获取当前用户信息。问题是我只需要在我的 3 个模块中的两个中执行此操作,因此我需要能够询问例如。

if ($moduleName !== "filteredmodule"){ // 执行请求 }

谢谢。

【问题讨论】:

    标签: zend-framework module bootstrapping


    【解决方案1】:

    Bootstrap 用于准备应用程序。我建议您在控制器插件(您可以使用它来获取当前调用的模块)或控制器的 init() 函数中进行这种调用。

    这是通过控制器插件获取当前模块的方法:

    <?php
    
    final class YourApp_Controller_Plugin_YourPluginName extends Zend_Controller_Plugin_Abstract {
    
        public function preDispatch(Zend_Controller_Request_Abstract $request) {
            $module = $request->getModuleName(); //This is the module
    

    文档:http://framework.zend.com/manual/en/zend.controller.plugins.html

    【讨论】:

    • 谢谢我知道这个我的问题是我正在做这个 $view->navigation() ->setAcl($this->_acl) ->setRole(Zend_Registry::get('role '));在 bootrstrap 文件中,我需要在此之前执行其他代码,因为我在那里设置了角色,并且控制器插件在引导资源之后执行。那么我应该做的是将导航也移至插件吗??
    • 您可以保持原样,并根据您在插件中的逻辑重新定义插件中的导航 ACL 角色
    • Ashley 是对的,在 Bootstrap 中设置 ACL 角色可能有点为时过早,因为路由甚至还没有发生,所以你不知道正在请求哪些资源(这很可能使很难做你的 ACL 逻辑)。
    • 好的,我成功了,我在插件中重新定义了导航acl,并为这个webservice请求做了一个插件,非常感谢你们
    【解决方案2】:

    关于阿什利的回答的一件事:

    如果你想做

    $module = $request->getModuleName();
    

    尽快,然后在 routeShutdown() 中执行。

    如文档所述,“在 Zend_Controller_Front 调用路由器之前调用 routeStartup() 以根据已注册的路由评估请求。在路由器完成路由请求后调用 routeShutdown()。”

    因此路由相关的请求参数,如模块、控制器、操作或路由中指定的任何其他参数都可以在 routeShutdown() 和后续函数中访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多