Mat*_*ann 2 php zend-route zend-framework2
我有一个可以援引作为一个控制器modulename/xmlcoverage与index行动以及其他一些动作,让说testAction().这个控制器的网址是xml/coverage.
然后,默认方式xml/coverage映射到我的索引操作.并xml/coverage/test映射到testAction.如果我需要testAction的id,那么url就像xml/coverage/test/33是.
但是,对于索引操作,它需要是xml/coverage/index/33
我希望的位置xml/coverage/33.
这是我的路线
'xmlcoverage' => array(
'type' => 'segment',
'options' => array(
'route' => '/xml/coverage[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'modulename/xmlcoverage',
'action' => 'index',
),
),
),
Run Code Online (Sandbox Code Playgroud)
在尝试url xml/coverage/33时,我认为33应该映射到id,因为它与action的正则表达式不匹配,并且两者都是可选的.由于它与动作不匹配,因此应使用默认(索引).
相反,我得到一个错误,说该网址无法匹配.所以对我来说,它的行为好像是'/xml/coverage[/:action[/:id]]'因为我出于某种原因必须指定行动来识别id.
我做错了什么,我怎样才能让网址按照我的意愿行事?谢谢.
编辑:这是一个问题. 在我看来这样做:
$this->url('xmlcoverage', array('action' => 'index', 'id' => $someid))
Run Code Online (Sandbox Code Playgroud)
实际上在表单上提供了一个xml/coverage/1会崩溃的URL !改变路线/xml/coverage[/:action[/:id]]至少会使网址助手产生工作网址..
在与IRC上的优秀ZF2人员交谈和调试之后,我们追踪了路由中的一个错误.
在讨论中,我为我的问题做了一个小例子,就在这里.正如您在此处的var转储中所看到的,在第二种情况下,操作会丢失,它应该默认为"index".
但是,如果有人现在需要此功能,可以采取以下方法解决问题:
/test[/:action][/:id]有它/test[/:action[/:id]],那么url帮助器将添加/ index /并且至少它可以工作./test[/:id]另一条路线.public function notFoundAction() { $view = new ViewModel($this->indexAction()); //etc}Kinda hacky,但有了这个bug,它会发送一个未找到的动作,你可以背负.