0

我想通过 Bootstrap.php 更改应用程序的默认路由以使用可选参数,而不是在 application.ini 中。我在设置所有“逃生”路线时遇到了麻烦,我什至不知道我是否需要设置多条路线,或者我是否可以只设置一条!

路线必须类似于

":module/:area/:controller/:action"

其中 :area 是可选的,默认为“public”

因此,在对http://www.example.com/my_module/my_controller/my_action的任何访问中,我都可以通过 FC 插件获得以下信息:

$request->getParam('area') = "public"

http://www.example.com/my_module/my_area/my_controller/my_action我得到:

$request->getParam('area') = "my_area"

主要问题是创建所有路由,因此它会转义到默认模块、索引控制器和索引操作,以防它们也没有通过并且加载http://www.example.com/返回与http://www.example.com相同/默认/公共/索引/索引

我想使用 URL Helper 来生成内部 URL,它尊重这个新的默认路由上的正确程序集。

编辑:我认为默认 Route 带有模块的故障安全功能,如果它不存在,则默认为控制器,但是在创建它时如何模拟 URL 的其他部分和模块本身的类似行为引导程序。

任何人都可以给我一些启示或建议我在哪里可以找到一个工作示例?

4

2 回答 2

1

您可以扩展Zend_Controller_Router_Rewrite和更改默认路由器设置和 URL 组装,然后->setRouter()在 Zend_Controller_Front 上使用您的新路由器实例而不是默认路由器实例。class Zend_Controller_Router_Rewrite在这样做之前搜索并学习它。

于 2011-10-07T18:35:01.427 回答
1

解决方案确实是扩展Zend_Controller_Router_Route_Abstract并创建一个新的 Route 处理程序来遍历 url,验证模块、区域、控制器和操作的存在以构建完整功能的 url 或调度到错误控制器。

繁重的工作是在match()assemble()方法之间完成的,我使用 Zend 类作为参考Zend_Controller_Router_Route_Module,对模块执行类似的任务,但是我没有使用调度程序验证模块是否存在,而是创建了一个允许区域的白名单,如果它无法匹配,它认为路径部分是控制器,下一个动作和其他部分是参数。

它像魔术一样工作!

于 2011-10-07T22:39:10.057 回答