Routing w Zend Framework

Ostatnio natknąłem się na problem z zachowaniem się Frameworka w przypadku, gdy została zastosowana metoda $router->removeDefaultRoutes();

Problem polegał na notorycznym ładowaniu domyślnego kontrolera i domyślnej akcji (zamiast Error Handlera) w przypadku nieodnalezienia strony w routes.xml. Jest to dość intrygujące zachowanie, które zauważyłem nie tylko ja :-) Twórcy niestety twierdzą, że takie zachowanie się frameworka jest by design. Na szczęście od czego jest OOP i dziedziczenie klas :) A więc w pliku Bootstrap.php dodajemy na początku:

class CustomDispatcher extends Zend_Controller_Dispatcher_Standard
{
public function dispatch(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response)
{
$controller = $request->getControllerName();
if (empty($controller)) {
throw new Zend_Controller_Dispatcher_Exception('Nie znaleziono takiej strony');
}
return parent::dispatch($request, $response);
}
}

A następnie w samej klasie Bootstrap dopisujemy funkcję inicującą:

public function _initDispatcher()
{
$dispatcher = new CustomDispatcher();
$front = Zend_Controller_Front::getInstance();
$front->setDispatcher($dispatcher);
return $dispatcher;
}

I to by było na tyle.
Należy pamiętać o wspomnianej już funkcji removeDefaultRoutes w _initRouting() ;-)

Dodaj komentarz

Twój adres email nie będzie opublikowany. Proszę, wpisz swoje imię, email oraz treść komentarza :)

*

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>