2010-11-26 5 views
2

Aidez s'il vous plaît! Je suis un débutant à Zend et je veux modifier le routage par défaut pour un projet cms sur lequel je travaille.Zend Route Attraper tout

Comment créer une route "catch all" dans zend si un contrôleur n'existe pas?

Je suis en train de créer des liens comme:

mydomain.com/slug

mydomain.com/slug1

Où limaces et slug1 peuvent être passés comme params à un contrôleur par défaut spécifié (PagesController) afin que je puisse aller chercher le contenu approprié à partir de la base de données.

J'apprécie toute aide !! :)

Répondre

2

Une façon de le faire est d'écrire un plugin simple contrôleur qui vérifie si une demande est par ailleurs dispatchable, et sinon, envoyez-le à votre contrôleur de la page Action/

<?PHP 
class PageRouter extends Zend_Controller_Plugin_Abstract { 

    public function preDispatch(Zend_Controller_Request_Abstract $req) { 
    $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher(); 
    if (!$dispatcher->isDispatchable($req, $req)) { 

     $req->setModuleName('default'); 
     $req->setControllerName('page'); 
     $req->setActionName('page'); 
    } 
    } 

} 

Et assurez-vous vous l'enregistrez avec votre frontController:

Bootstrap.php:

protected function _initFrontControllerPlugins() { 
    $this->bootstrap('FrontController'); 

    $fc = $this->getResource('FrontController'); 

    $pluginPageRouter = new PageRouter(); 
    $fc->registerPlugin($pluginPageRouter);  
} 
+0

Vous êtes un sauveteur !! J'étais si proche que je ne savais pas comment utiliser isDispatchable dans le plugin. Merci pour votre aide timdev !! – Cullen2010

0

au lieu de remplacer la preDispat ch, vous pouvez également le faire dans la routeShutdown. C'était le seul moyen de le faire pour moi.