【问题标题】:Add a optional parameter in default Zend route在默认 Zend 路由中添加可选参数
【发布时间】:2011-10-07 14:50:59
【问题描述】:

我想通过 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"

主要的问题是创建所有路由,因此它会转义到 default 模块、index 控制器和 index 动作,以防它们也没有通过并加载 http://www.example.com/ 返回与 http://www.example.com/default/public/index/index 相同。

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

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

谁能给我一些启示或建议我在哪里可以找到一个可行的例子?

【问题讨论】:

    标签: php zend-framework bootstrapping zend-route


    【解决方案1】:

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

    【讨论】:

    • 是的,这就是我想要避免的。我虽然有一种方法可以让这项工作简单地添加路线:(
    • 添加路由可能有助于访问正确的控制器/操作,但您仍然需要对路由器进行更改以允许在不同的设置中生成 URL。您始终可以使用setGlobalParam 来避免更改路由器,但链接并不总是像您建议的那样。
    • 我选择使用 Zend_Controller_Router_Route_Module 的修改版本而不是 Rewrite 版本!然后我在 Bootstrap 上使用它!我让你知道结果,现在就在努力!
    【解决方案2】:

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

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

    它就像魔术一样!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2010-09-23
      • 2017-03-24
      相关资源
      最近更新 更多