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() ;-)
Ostatnie komentarze