2010-11-05 3 views
1

я это маршрутизациейZend: как маршрут некоторые действия

$router->addRoute('clinics', 
new Zend_Controller_Router_Route('clinics/:clinicPath', array('controller' => 'clinics', 'action' => 'view')), 
new Zend_Controller_Router_Route('clinics/create', array('controller' => 'clinics', 'action' => 'create1'))); 

И я хочу, чтобы создать клинику (сделайте в createAction), если я иду «клиники/создать» и посмотреть клинику, если им будет что-то другое (например, . 'clinic/happyTooth').

Теперь на любом подъеме ссылок Посмотреть событие. Как это изменить? thx.

+2

Вы пробовали сдачи «клиники/создать» маршрут первым? –

+0

Да, попытка - каждая клиника ссылка стала «клиниками/творить» –

ответ

1

Я думаю, что нужно добавить правило на маршруте, попробуйте:

new Zend_Controller_Router_Route('clinics/:clinicPath', 
    array('controller' => 'clinics', 'action' => 'view'), 
    array('clinicPath' => '(?!create)[a-z\-0-9^.]+')), 
+0

Вы могли бы писать регулярные выражения. например, для создания, удаления и редактирования действия? Благодаря! –

+1

Вы можете добавить | для выполнения OR, поэтому попробуйте (?! create | delete | edit) [a-z \ -0-9 ^.] + – subosito

1

Я думаю, что самый простой способ - использовать функцию magicics __call функции ClinicsController и выполнить соответствующий вызов метода (и использовать маршрут по умолчанию).

1

Вы не звоните addRoute($name, $route) должным образом. Вы должны либо позвонить ему дважды (один раз за маршрут), либо позвонить addRoutes(array($route1, $route2)). Вероятно, это является причиной вашей проблемы.

Маршруты согласованы в обратном порядке, поэтому ваш заказ правильный. «Создать» является специфическим, поэтому вы хотите его в нижней части списка, поэтому он сопоставляется перед динамическим маршрутом над ним.

Смежные вопросы