【问题标题】:Zend framework module routes - accessing actionsZend 框架模块路由 - 访问动作
【发布时间】:2011-08-18 11:41:12
【问题描述】:

我的模块如下:

modules
    default
        controllers
            IndexController

    user
        controllers
            IndexController

如果我在名为 testAction() 的默认 IndexController 中放置一个操作,我可以按预期在 /index/test 或 default/index/test 运行该操作。

如果我在用户 IndexController 中放置相同的操作并尝试在用户/索引/测试中访问它,则无法运行 testAction()。相反,它运行在同一控制器中的 indexAction()。为什么会这样?

额外信息:我有一个位于 application/configs/application.ini 的 ini 文件,它的内容是:

[production]
phpSettings.date.timezone = 'Europe/Belfast'
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"

;;namespaces

;site-wide namespaces
autoloaderNamespaces[] = "Plugin_"
autoloaderNamespaces[] = "Helper_"

;form validators
autoloaderNamespaces[] = "Validate_"

;modules
autoloaderNamespaces[] = "Users_"
autoloaderNamespaces[] = "Admin_"

;storage adapters
resources.db.adapter = mysqli
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = 
resources.db.params.dbname = vi

;modules
;resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules = ""

;layouts
resources.layout.layoutPath = APPLICATION_PATH "/layouts"
resources.layout.layout = master

;routes

; /home route
resources.router.routes.home.route = /home
resources.router.routes.home.defaults.module = default           
resources.router.routes.home.defaults.controller = index
resources.router.routes.home.defaults.action = index        

; /content route
resources.router.routes.static-content.route = /content/:page              
resources.router.routes.static-content.defaults.module = default           
resources.router.routes.static-content.defaults.controller = static-content
resources.router.routes.static-content.defaults.action = display 


;resources.frontController.plugins.CheckHasAccess = "Plugin_AccessCheck"


[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

[development : testing]

我正在开发环境中运行应用程序。

【问题讨论】:

    标签: zend-framework


    【解决方案1】:

    好的,我完全忘记了一些事情......我有一个运行 preDispatch 的 ACL 插件,它正在添加一些路由规则!这是导致问题的代码片段:

        if (! $acl->isAllowed($role, $resouce, $action)) {
            $request->setModuleName('default')
                    ->setControllerName('auth')
                    ->setActionName('login');
        } else {
            // if already logged in as user..
            $request->setModuleName('user')
                    ->setControllerName('index')
                    ->setActionName('index');
        }
    

    所以你看,如果用户已登录,他们别无选择,只能进入 user/index/index 操作!希望这可以帮助其他人避免同样的挫败感。

    【讨论】:

    • 另外...不要忘记将任何新资源添加到您的 ACL!
    【解决方案2】:
    resources.modules = ""
    

    应该是

    resources.modules = []
    

    【讨论】:

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