zendframework 2路线匹配没有提升价值

时间:2014-04-23 07:50:25

标签: routing zend-framework2

我有一个路由器应该为我提供几个参数。但是路由器没有返回messId。

配置:

'messages' => array(
            'type'    => 'segment',
            'options' => array(
                'route'       => '/message[/:action][/:id][/:senderId][/:messId]',
                'constraints' => array(
                    'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'id'         => '[0-9]+',
                    'senderId'   => '[0-9]+',
                    'messId'   => '[0-9]+',
                ),
                'defaults' => array(
                    'controller' => 'Messages\Controller\MessController',
                    'action'     => 'index',
                ),
            ),
        ),

从路线匹配返回的值:

object(Zend\Mvc\Router\Http\RouteMatch)[346]
  protected 'length' => int 42
  protected 'params' => 
    array (size=4)
      'controller' => string 'Messages\Controller\MessController' (length=36)
      'action' => string 'read-message' (length=12)
      'id' => string '4' (length=1)
      'senderId' => string '3' (length=1)
  protected 'matchedRouteName' => string 'messages' (length=15)

您将在上面注意到缺少messId的路由匹配;

在我的网址

下面
<a href='{$this->url('messages', array('action'=>'read-message','senderId'=>$this->escapeHtml($user['id']), 'messId'=>$this->escapeHtml($user[0]['id']) ))}'>Read Message</a>  
谢谢你的亲切帮助。

1 个答案:

答案 0 :(得分:0)

问题在于你的路线含糊不清。 :id:senderId:messId都是可选的,并且它们都是所有数字。因此,给定像http://testingzend2/send-message/read-message/7/2这样的网址,ZF如何知道每个数字与哪个变量相关?

您需要使这些不是可选的,或者更改路线,以免产生歧义。例如,您可以这样做:

'route' => '/message[/:action][/id/:id][/senderId/:senderId][/messId/:messId]',

这会为您提供类似http://testingzend2/send-message/senderId/7/messId/2

的网址