2009-11-25 22 views
5

J'ai passé de nombreuses heures à essayer de faire en sorte que cela fonctionne. Et je deviens tout à fait désespéré. Serait bien si quelqu'un là-bas pourrait m'aider :)Zend Framework: comment désactiver le routage par défaut?

Actuellement en utilisant Zend Framework 1.9.5, bien que j'ai eu du mal à obtenir ce travail pour de nombreuses versions maintenant. Ce que je veux faire est de fournir mes propres routes via une configuration XML, et m'assurer que tout ce qui est et non défini dans ma configuration se retrouvera sur mon errorController. (de préférence d'une manière que je puisse em en dehors de EXCEPTION_NO_CONTROLLER et EXCEPTION_NO_ACTION)

je me suis dit que cela veut dire que je dois me débarrasser de défaut /: module /: controller /: action et /: contrôleur /: voies d'action. Par conséquent, lorsque je dis au routeur d'enlever DefautRoutes(), il ne correspondra plus à ces routes par défaut. Mais maintenant, le routeur est maintenant routage chaque itinéraire unrouted au defaultController :: DefaultAction (Qu'est-ce que le ??)

$front->getRouter()->removeDefaultRoutes(); 

Alors, quelqu'un sait comment faire le frontController (ou une partie de celui-ci) jeter une exception quand un URI ne peut pas être routé?

Raison pour laquelle je veux faire est d'éviter le duplicate content, et ont de meilleures 404 pages (dans ce cas, aucun contrôleur/aucune erreur d'action sont en fait des erreurs d'application au lieu de non trouvés)

Répondre

5

Avez-vous essayé d'ajouter une nouvelle route comme

$route = new Zend_Controller_Router_Route('*', array('controller'=>'error', 'module'=>'default', 'action'=>'error')); 


$router->addRoute('default', $route); 

Vous devez d'abord ajouter cet itinéraire car il doit être le dernier traité.

+0

D'accord, c'est ce que j'ai fait. Cela fonctionne, parce que sur cette action, je jette une exception qui indique 404. C'est encore une solution de contournement, mais merci pour l'aide mec – Maurice

2

Avance rapide dans le temps d'un an plus tard ... (heure de la musique Voyage)

Voici une autre façon que je pense est beaucoup moins « intrusive ». Vous pouvez écrire un plugin pour attraper la route par défaut et quand cela arrive, lancez une exception qui à la fin du cycle entier est traduite en 404 par le contrôleur frontal.

class Application_Plugin_DisableDefaultRoutes extends Zend_Controller_Plugin_Abstract 
{ 
    public function routeShutdown(Zend_Controller_Request_Abstract $request) 
    { 
     $front = Zend_Controller_Front::getInstance(); 
     $currentRoute = $front->getRouter()->getCurrentRouteName(); 
     if ($currentRoute == 'default') { 
      throw new Exception('Default route is disabled'); 
     } 
    } 
} 

Vous pouvez charger votre plugin dans Bootstrap.php

protected function _initPlugins() 
{ 
    $front = Zend_Controller_Front::getInstance(); 
    $front->registerPlugin(new Application_Plugin_DisableDefaultRoutes()); 
} 

Avec cette façon, vous pouvez charger le plug-in dans la machine de production et le laisser dans le développement où vous pouvez utiliser la route par défaut pour des tests rapides ou autre chose.

+0

Merci l'homme, j'apprends ZF et votre exemple est utile. –

+0

Merci, j'ai trouvé que le système de plugin ZF1 est très pratique et puissant. Je n'ai pas eu l'occasion d'essayer ZF2. – Julian