【发布时间】:2012-07-18 08:12:31
【问题描述】:
我有一个控制器,可以使用index 操作和其他一些操作(例如testAction())调用modulename/xmlcoverage。
这个控制器的 url 是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',
),
),
),
当尝试使用 url xml/coverage/33 时,我认为 33 应该映射到 id,因为它与操作的正则表达式不匹配,并且两者都是可选的。而且由于它不匹配一个动作,所以应该使用默认值(索引)。
相反,我收到一条错误消息,指出 url 无法通过路由匹配。
所以对我来说,它就像路由是'/xml/coverage[/:action[/:id]]',因为我出于某种原因必须为其指定操作以识别 id。
我做错了什么,如何让网址按我的意愿工作? 谢谢。
编辑:这是一个问题。 在我看来这样做:
$this->url('xmlcoverage', array('action' => 'index', 'id' => $someid))
实际上以xml/coverage/1 的形式给出了一个URL,它会崩溃!
将路由更改为/xml/coverage[/:action[/:id]] 至少会使 url helper 产生工作 url..
【问题讨论】:
-
那个应该真的可以工作,我在段路由中测试了生成的正则表达式,匹配成功。您是否在 freenode 上的 #zftalk.2 IRC 频道上调查此问题?
-
@DASPRiD 我现在在那儿。那里也有人建议创建一条新路线,例如 /xml/coverage/[:id]。这是一个很好的建议。但是,我想知道为什么这对我不起作用,而对你起作用。
标签: php zend-route zend-framework2