【问题标题】:Zend Framework Controller to Module routingZend 框架控制器到模块路由
【发布时间】:2012-04-18 12:57:44
【问题描述】:

所以我一直在尽我最大的努力尽可能多地吸收 Zend 框架,这对我来说是相当新的,距离我第一次尝试已经过去了大约两周,到目前为止做得很好。

但是我遇到了一个我无法弄清楚的小问题。

这就是交易,我有一个标准的 Zend Framework 项目,其中包含许多模块。像这样:

- Project
- - Application
- - - configs
- - - controllers
- - - - IndexController
- - - - WMSController
- - - forms
- - - layouts
- - - models
- - - modules
- - - - content
- - - - - controllers
- - - - - - IndexController
- - - - - models
- - - - - views
- - - - - Bootstrap
- - - views
- - - bootstrap
- - public

etc..

现在我在 WMSController 的视图中设置了一个简单的测试链接,它应该将某人点击它指向内容模块的 IndexController。

<a href="wms/content"> test link to content module</a>

现在您可能会看到此链接不起作用,因为它指向 localhost/wms/content 这将是 WMSController 中的内容操作,目前不存在。

现在我想做的是让 wms/content 实际上指向内容模块的 IndexController。为什么?好吧,我只是不希望用户键入 localhost/content 来访问作为 WMS 一部分的内容模块。我想强迫他们先通过 WMS 控制器。

我已经阅读了很多关于路由是使用引导程序或自动加载器的解决方案的内容,但几乎所有这些内容都只是帮助您将某个 url 指向特定控制器中的特定操作。

我想要的是一个指向特定模块中特定控制器中特定操作的 url。

注意:所有其他控制器和视图仍然是默认生成的版本,尚未对其进行任何更改!

如果有人可以向我展示如何完成此操作的代码示例,将不胜感激!

【问题讨论】:

标签: zend-framework frameworks module routing controllers


【解决方案1】:

如果我理解正确,您只是希望 /wms/content 指向模块 content 控制器 Index 操作 索引。这是一个简单的路由器可以工作的情况(至少在您想变得更复杂之前)

在您的 application.ini 中添加以下行:

resources.router.routes.content.route = "wms/content"
resources.router.routes.content.defaults.module = "content" 
resources.router.routes.content.defaults.controller = "index"
resources.router.routes.content.defaults.action = "index"

这是构建自定义路由的最简单方法。
*注意:*左起第 4 个参数是路由的名称,因此如果您将它与允许使用路由名称的方法(例如 url() 帮助程序)一起使用,您可以使用路线名称。
$this-&gt;url(array(), 'content');

这就是您使用命名路由的方式,我个人可能会考虑重命名我的模块 wms(如果可能且实用),然后从默认的 Index 控制器重定向到那里。因为一旦你从命名和自定义路由开始,就很难退出......

【讨论】:

    【解决方案2】:

    根据你的问题,你

    想强制他们先通过 WMS 控制器

    你可以做一件事。每当用户键入 localhost/content/** 时,无论您想在 WMSController 中做什么,您都可以将其放在模块中所有控制器的父类中:“内容”。这样,您可以在每次请求到达此控制器时检查某些内容/执行操作(无论用户是否想转到其他模块。)

    类 Content_AnyController 扩展 MyControllers_Controller_Action_Admin{ …… }

    在哪里

    class Reviewmo_Controller_Action extends Zend_Controller_Action{ 
        public function init(){
        //Things you want to do each time
        }
    
    }
    

    这就是我认为您想要实现的目标,因为如果您只想简单地重定向到 WMSController 的 ContentAction,您可以简单地重定向到该控制器。

    【讨论】:

      猜你喜欢
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      相关资源
      最近更新 更多