2009-08-13 4 views
3

Je viens de commencer mon aventure avec zend framework 1.9.1 mais j'ai rencontré quelques problèmes. Je voudrais supprimer des routes par défaut pour éviter d'afficher le même contenu sur des URL différentes - à achive, j'ai écrit fonction personnalisée dans bootstraperProblème de routage ZF

<?php 

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initMyRouter() 
    { 
     $this->bootstrap('router') 
      ->getContainer() 
      ->frontcontroller 
      ->getRouter() 
      ->removeDefaultRoutes(); 
    } 
} 

mais après cela, un problème se pose - chaque URL non valide atteint par défaut contrôleur au lieu de contrôleur d'erreur. Pour résoudre ce problème, je mets resources.frontController.defaultcontrollername = "erreur" resources.frontController.defaultaction = "jeter" dans application.ini et

public function throwAction() 
{ 
    throw new Zend_Controller_Dispatcher_Exception; 
} 

dans ErrorController pour contourner cela, mais ma question est .. . Est-ce que je fais quelque chose de mal?

Le deuxième problème est que je n'ai besoin de générer que des URL absolues. J'ai donc ajouté resources.frontController.baseurl = "http://mydomain.com/" dans application.ini mais après chaque URL pointe sur le contrôleur par défaut. Comment le réparer? Le troisième (et dernier) est ... comment appeler Zend_Controller_Action_Helper_Url :: url dans mes actions? J'ai essayé quelque chose comme $ this -> _ helper-> url (array(), 'frontpage') mais il appelle Zend_Controller_Action_Helper_Url :: direct

Répondre

1

Je vais d'abord répondre au numéro trois car je peux vous dire du haut de la tête .

J'utilise généralement $this->view->url(array(...), 'routeName', true); le dernier argument réinitialise les paramètres. Je trouve que l'aide de vue est un peu plus facile/rapide à taper que l'aide d'action. Bien que je pense que $this->_helper->url->url(...) est le bon moyen d'arriver à l'aide à l'action.

Je n'ai jamais supprimé la route par défaut - mais s'il n'y a pas d'autres réponses plus tard dans la journée - je ferai de mon mieux pour faire des tests pour vous après les heures de travail.