0

因此,我一直在尽我最大的努力尽可能多地吸收对我来说相当新的 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。

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

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

4

2 回答 2

1

如果我理解正确,您只想/wms/content指向模块内容控制器Index action 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->url(array(), 'content');

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

于 2012-04-19T09:38:24.470 回答
0

根据你的问题,你

想强迫他们先通过 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,您可以简单地重定向到该控制器。

于 2012-04-18T14:25:39.910 回答