在默认的Zend路由中添加一个可选参数

问题描述:

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

路线必须是这样的

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

其中:面积是可选的,默认为“公共”

所以到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/default/public/index/index

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

编辑:我认为默认路由带有模块的故障安全保护,如果它不存在,它默认为控制器,但是如何模仿URL和模块本身的其他部分的类似行为在Bootstrap中创建它时。

任何人都可以给我一些光明或建议我在哪里可以找到一个工作的例子?

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

繁重的工作是match()assemble()方法之间做,我作为参考了Zend类Zend_Controller_Router_Route_Module THT的模块,但而不是验证是否与我创建允许领域的白名单调度中存在模块做类似的任务,如果不匹配,则认为该路径部分是控制器,下一个动作和其他部分是参数。

它像魔术一样工作!

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

+0

Yeap,这是我想要避免的。我虽然有一种方法可以简单地添加路由:( –

+0

)添加路由可能有助于访问正确的控制器/操作,但是您仍然需要对路由器进行更改以允许在不同的设置中生成URL。总是使用'setGlobalParam'来避免路由器的改变,但是链接并不总是看起来像你所建议的那样 –

+0

我选择使用Zend_Controller_Router_Route_Module的修改版本而不是重写!然后我在Bootstrap上使用它!让你知道结果,现在就开始吧! –