Jest używany pierwszy routing który pasuje do schematu (a więc aktywny).
Nie polecam definiowania routingu w pliku ini, można to zrobić na 2 inne sposoby.
1. w bootstrap.php
Moim zdaniem najlepsze miejsce na zdefiniowanie routingu (jeżeli nie jest trzymany w bazie lub plikach zewnętrznych).
Tworzymy coś takiego:
public function _initRouter(){
$routes['news'] = new Zend_Controller_Router_Route( //tworzymy nowy route
'@news', //podajemy jaką ścieżkę ma mieć route, znak @ oznacza, że fraza news ma zostać przetłumaczona przy pomocy Zend_Translate - tylko, że wcześniej w bootstrapie trzeba umieścić w Zend registry instancję Zend_Translate jako klucz podając 'Zend_Translate'. Jeżeli nie używasz translacji, to musisz wywalić znak małpy i zostawić samo 'news' bo będzie sypało błędami
'module'=>'default', //definiujemy do jakiego modułu ma prowadzić route
'controller'=>'index', //jakiego kontrolera
'action'=>'news' //i do jakiej akcji
)
);
$routes['news_read'] = new Zend_Controller_Router_Route(
'@news/:title/:id/', //po dwukropku podajemy nazwy zmiennych które mają być przekazane do aplikacji (do odczytanie w $this->_request->getParam('zmienna');
'module'=>'default',
'controller'=>'index',
'action'=>'news',
'title'=>null //tutaj musimy zdefiniować standardową wartość, proponuję null, bo jest to zgodne z prawdą gdy się nic nie przekaże
'id'=>null //tak samo jak wyżej
)
);
$router = Zend_Controller_Front::getInstance()->getRouter(); // tutaj wyciągamy router
$router->addRoutes($routes); //i wsadzamy do niego nowe routy
} //i gotowe
Ten sposób (moim zdaniem) jest najlepszy, w szczególności gdy mamy aplikacje która posiada jakieś dodatkowe moduły, wtedy możemy definiować ścieżki do danego modułu w jego własnym bootstrap.php.
Drugim sposobem jest umieszczenie powyższego kodu w pluginie, tylko trzeba pamiętać, aby zdefiniować routing w routeStartup() bo aplikacja nie będzie wiedziała o routingach podczas sprawdzania ścieżek, i będą się działy cuda na kiju, bo routing nie będzie sobie zdawał sprawy z istnienia dodatkowych scieżek, i nie będzie wiedział jak je przepisać, ale widok już będzie miał te informacje i ścieżki będzie dobrzy wysyłał.
A propos ścieżki do katalogu domowego, to ja ją definiuję tak:
public function _initRouter(){
$routes['home'] = new Zend_Controller_Router_Route(
'/',
'module'=>'default',
'controller'=>'index',
'action'=>'index'
)
);
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addRoutes($routes);
}
i jeszcze bardzo fajna rzecz: Zend_Route, Zend_Translate, Zend_Acl, Zend_Auth, Zend_Navigation - bardzo dobrze ze sobą współpracują: Acl ustawia przywileje użytkownikowi który zalogował się przez Auth, jednocześnie Zend_Route sprawdza przy użyciu zend Acl czy użytkownik może korzystać z danego zasobu i przekazuje tą informację do Zend_Navigation, tak, że użytkownik nie zobaczy odnośników do których nie ma dostępu.