У меня есть контроллер, который можно вызывать как modulename/xmlcoverage
с действием index
и некоторыми другими действиями, скажем, testAction()
. URL-адрес этого контроллера — xml/coverage
.
По умолчанию xml/coverage
сопоставляется с моим действием index. И этот xml/coverage/test
сопоставляется с testAction. Если мне нужен идентификатор для testAction, 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 должен сопоставляться с идентификатором, поскольку он не соответствует регулярному выражению действия, и оба являются необязательными. И поскольку он не соответствует действию, следует использовать значение по умолчанию (индекс).
Вместо этого я получаю сообщение об ошибке, говорящее о том, что URL-адрес не может быть сопоставлен маршрутизацией. Так что для меня это действует так, как если бы маршрут был '/xml/coverage[/:action[/:id]]'
, потому что я по какой-то причине должен указать действие для распознавания идентификатора.
Что я делаю неправильно и как заставить URL-адреса работать так, как мне хотелось бы? Спасибо.
EDIT: Вот проблема. Выполнение этого, на мой взгляд:
$this->url('xmlcoverage', array('action' => 'index', 'id' => $someid))
на самом деле дает URL-адрес в форме xml/coverage/1
, что приведет к сбою! Изменение маршрута на /xml/coverage[/:action[/:id]]
, по крайней мере, заставит помощника URL-адресов создавать рабочие URL-адреса.