2012-03-02 3 views
0

J'ai implémenté un service RESTful en étendant le Zend_Rest_Controller. Le service fonctionne très bien. J'ai seulement un contrôleur qui a réellement le comportement de RESTful. J'ai donc ajouté la route de repos pour seulement ce contrôleur dans le bootstrap.zend rest route routage routage pour contrôleur par défaut

protected function _initRestRoute() 
{ 
    $this->bootstrap('frontController'); 
    $frontController = Zend_Controller_Front::getInstance(); 
    $restRoute = new Zend_Rest_Route($frontController, array() , array('default' =>  array('MyserviceController'))); 
    $frontController->getRouter()->addRoute('rest', $restRoute); 

} 

Le problème commence lorsque j'exécute mon application zend de portail. Les liens dans la mise en page pour le contrôleur d'index manquent sur le paramètre d'action lorsque je construis l'URL. Par exemple, le lien sur la disposition d'index pour une page d'accueil d'action dans le contrôleur de réseau est le suivant.

$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default')); 

cela devrait revenir "localhost/projectname/public/réseau/page d'accueil" mais retourne "localhost/projectname/public/réseau". Ce comportement est uniquement lorsque la mise en page est chargée par le contrôleur par défaut, c'est-à-dire IndexController. Le problème de routage disparaît si je supprime la route de repos zend du bootstrap. Tant que je mentionne quel contrôleur la demande de repos doit acheminer vers elle ne devrait pas être un problème droit. Mais cela affecte le routage du contrôleur par défaut.

Répondre

0

Cela semble être un problème commun et généralement résolu avec quelque chose comme:

$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default'), 'default'); 

ou:

$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default'), NULL, TRUE); 

pourrait fonctionner.

Si votre 'module'=>'default' est le répertoire de contrôleurs par défaut à /application/controllers, vous pouvez omettre l'option de module de l'itinéraire.

Voici la méthode de l'ensemble de l'url notez les commentaires pour l'option de réinitialisation.

/** 
    * Generates an url given the name of a route. 
    * 
    * @access public 
    * 
    * @param array $urlOptions Options passed to the assemble method of the Route object. 
    * @param mixed $name The name of a Route to use. If null it will use the current Route 
    * @param bool $reset Whether or not to reset the route defaults with those provided 
    * @return string Url for the link href attribute. 
    */ 
    public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true) 
    { 
     $router = Zend_Controller_Front::getInstance()->getRouter(); 
     return $router->assemble($urlOptions, $name, $reset, $encode); 
    } 
+0

ouais cela a fonctionné ... merci beaucoup. – biker46s

Questions connexes