3

我正在尝试创建或找到一条基本上可以捕获所有内容的路线。我需要的是可以路由以下内容的东西;

/some-page/some-childpage/another-childpage
/another-page
/yet-anotherpage/page

这些 url 不会与任何模块相关,它们更重要的是管理员可以在任何 url 上创建页面。

我现在有一些东西可以使用通配符路由和子通配符路由来捕获路由,但是当我在 URL 视图助手中使用它时,它会在“url”参数中对正斜杠进行编码。基本上:

$this->url( 'public_page', array( 'url' => 'foo/bar' ) )

正在输出/foo%2Fbar

除了不允许 /s 之外,当尝试检索 url 参数时,它会将查询字符串返回到第一个 /。

任何帮助和建议都会很棒!

问候,迈克尔

4

1 回答 1

0

我不确定您是否可以使用任意数量的段来做到这一点。您可以指定具有您期望的最大段数的段路由,然后只允许它们都是可选的,但如果您尝试使用大量段,这似乎是一种肮脏的方式。

'route' => '/:controller[[[[/:action]/:third]/:fourth]/:fifth]',
    'constraints' => array(
        'controller' => '[a-zA-Z][a-zA-Z0-9_-]+',
        'action'     => '[a-zA-Z][a-zA-Z0-9_-]+',
    ),
    'defaults' => array(
        'controller' => 'Application\Controller\IndexController',
        'action'     => 'index',
        'third'      => 'something',
        'fourth'     => 'something-else',
    ),

你可以用 Regex 路由完成一些事情,但这也可能很讨厌。

http://framework.zend.com/manual/2.0/en/modules/zend.mvc.routing.html#zend-mvc-router-http-regex

我可能会建议使用更好的 url 结构,因为深度不是很好。

于 2013-02-13T09:18:06.343 回答