zend框架2路由表示更多分隔符

时间:2015-11-13 14:22:57

标签: php url routing zend-framework2

Zend网站建议我可以将整个字符串中的url分隔符(“/”)映射到zend路由器中的一个url参数: Zend Framework 2 - Router

所以我创建了这条路线:

'myRoute' => array (
        'type' => 'segment',
        'options' => array (
                'route' => '/someAction/:params{-}',
                'defaults' => array (
                        'controller' => 'Application\Controller\myController',
                        'action' => 'someAction'
                )
        ),
        'may_terminate' => true,
),

由于这是/ myController的子路由,我现在可以调用: http://myHost/myController/someAction/someParam1(someValue)/bookingCode(X79P00A3CB0002:000000010000000D000C80F601D)

这导致一个名为“params”的路由参数,然后我可以自己分析和爆炸。

这适用于上面指定的URL,但不适用于此URL: http://myHost/myController/someAction/someParam1(someValue)/bookingCode(aclGWciSaclGWciSaclGWciSmZmSaclsz1tF9KtSudlGWciSacl1eJlYeJl3edlWWYquHelC_IueXciSyJnSudl1eJlYeJlYedlw9KuYWsq4Kto0ielyrevSaclWWcmSadlYWYtiLevSmuroXYmSeKq-2-)

目前我认为我受限于URL段长度限制,但我没有得到任何类似的错误。 Zend刚回答“请求的页面无法解析”。

或者我不理解我路线的“/:params { - }”部分。

有人可以解释或提供解决方案吗?

*编辑1: 所以我发现第二个URL中的“ - ”字符是问题,但我不明白为什么。如果我从URL中删除它们,路由工作正常。

1 个答案:

答案 0 :(得分:0)

主要问题似乎是网址中的连字符。 我从段类型更改了路由以解决此问题。新路线如下:

'myRoute' => array (
    'type' => 'Zend\Mvc\Router\Http\Regex',
    'options' => array(
        'regex' => '/someAction/(?<params>[a-zA-Z0-9():/_-]*)',
        'defaults' => array(
            'controller' => 'Application\Controller\myController',
            'action' => 'someAction',
        ),
        'spec' => '/myController/%params%',
    ),
        'may_terminate' => true,
),

我不知道为什么连字符是个问题。所以,如果有人能够详细说明,我很乐意将其标记为答案!