2010-11-05 7 views
1

Je possède ce routageZend: comment acheminer une action

$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'))); 

Et je veux créer une clinique (faire le CréeAction) si je vais « cliniques/créer » et clinique de vue si im aller autre chose (ex . 'clinique/happyTooth').

Maintenant, sur n'importe quel lien, augmentez l'événement. Comment changer cela? thx.

+2

Avez-vous essayé de mettre les « cliniques/créer » premier itinéraire? –

+0

Oui, en essayant - chaque lien clinique est devenu 'cliniques/créer' –

Répondre

1

Je pense que vous devez ajouter la règle sur votre route, essayez:

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

pourriez-vous écrire expr régulière. par exemple pour créer, supprimer et modifier une action? Merci! –

+1

Vous pouvez ajouter | pour effectuer OU essayez donc (?! create | delete | edit) [a-z \ -0-9 ^.] + – subosito

1

Je suppose que le moyen le plus simple est d'utiliser la fonction magique __call du ClinicsController et d'y faire correspondre un appel de méthode (et d'utiliser la route par défaut).

1

Vous n'appelez pas le addRoute($name, $route) correctement. Vous devriez l'appeler deux fois (une fois par trajet) ou appeler le addRoutes(array($route1, $route2)). C'est probablement la cause de votre problème.

Les routes sont appariées dans l'ordre inverse, donc votre commande est correcte. "create" est spécifique, donc vous le voulez en bas de la liste, donc il est apparié avant l'itinéraire dynamique au-dessus.

Questions connexes