Php 在默认Zend route中添加可选参数

Php 在默认Zend route中添加可选参数,php,zend-framework,bootstrapping,zend-route,Php,Zend Framework,Bootstrapping,Zend Route,我想通过Bootstrap.php(而不是application.ini)将应用程序上的默认路由更改为使用可选参数。我在设置所有“逃生”路线时遇到困难,我甚至不知道我是否需要设置多条路线,或者我是否只能设置一条 路线一定是这样的 ":module/:area/:controller/:action" 其中:区域是可选的,默认为“公共” 因此,在任何访问中,我都可以通过FC插件获得以下信息: $request->getParam('area') = "public" 我得到了: 主要的问

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

路线一定是这样的

":module/:area/:controller/:action"
其中:区域是可选的,默认为“公共”

因此,在任何访问中,我都可以通过FC插件获得以下信息:

$request->getParam('area') = "public"
我得到了:

主要的问题是创建所有路由,以便在未传递这些路由的情况下,它会转移到默认模块、索引控制器和索引操作,并且加载返回的结果与默认模块、索引控制器和索引操作相同

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

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


有人能给我一些提示或建议我在哪里可以找到一个工作示例吗?

您可以扩展
Zend\u Controller\u Router\u Rewrite
并更改默认路由器设置和URL组合,然后在Zend\u Controller\u前端使用
->setRouter()
来使用新的路由器实例,而不是默认实例。搜索
类Zend_Controller_Router_Rewrite
,并在执行此操作之前学习它。

解决方案确实是扩展
Zend_Controller_Router_Route_Abstract
,并创建一个新的路由处理程序,以通过url,验证模块、区域的存在,控制器和操作,以生成完整功能的url或分派到错误控制器

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


它起了神奇的作用

是的,这就是我想要避免的。我认为有一种方法可以简单地添加路线:(添加路由可能有助于访问正确的控制器/操作,但您仍然需要更改路由器以允许在不同的设置中生成URL。您可以始终使用
setGlobalParam
来避免更改路由器,但链接并不总是像您建议的那样。我选择使用Zend_C的修改版本ontroller\u Router\u Route\u模块而不是重写模块!然后我在引导上使用它!我现在就开始使用它,让您知道结果!
$request->getParam('area') = "my_area"