我有一个路由器应该为我提供几个参数。但是路由器没有返回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>
谢谢你的亲切帮助。
答案 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