我有一个控制器,可以像操作和其他一些操作一样调用modulename/xmlcoverage
,index
比如说testAction()
。这个控制器的 url 是xml/coverage
.
然后,默认方式是xml/coverage
映射到我的索引操作。这xml/coverage/test
映射到 testAction。如果我需要 testAction 的 id,则 url 就像这样xml/coverage/test/33
。
但是,对于索引操作,它需要是xml/coverage/index/33
Where I would like it be 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 助手生成工作 url。