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

时间:2011-10-07 14:51:00

标签: php zend-framework bootstrapping zend-route

我想在我的应用程序上更改默认路由,以通过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/default/public/index/index相同的内容。

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

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

任何人都可以给我一些启示或建议我在哪里可以找到一个有效的例子吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

它就像魔法一样!