2009-09-30 8 views
0

J'utilise le routeur standard dans Zend Framework pour router la plupart des URL du système.Erreur urlencode() lors de l'utilisation de Zend_Controller_Router_Route et de l'assistant d'affichage d'URL

Pour une URL particulière, je veux y accéder via un alias de commande (en plus du contrôleur réel)

Par exemple.

URL réelle:

/mymodule/mycontroller/myaction/* 

URL Alias:

/mymodule/mycontrolleralias/myaction/* 

mycontrolleralias est pas un contrôleur réel, mais je veux toute demande à ce pour vous rendre à myController (paramètres de requête et tous)

Pour ce faire, j'ai essayé d'installer cette route:

$router->addRoute('controlleralias', new Zend_Controller_Router_Route(
    ':module/mycontrolleralias/:action/*', 
    array(
     'module'  => 'mymodule', 
     'controller' => 'mycontroller', 
     'action'  => 'myaction' 
    ) 
)); 

Mais dans mon aide de vue si je tente de créer une URL:

$this->view->url(array('sort' => array('param1','param2'))); 

Je reçois une erreur:

urlencode() expects parameter 1 to be string, array given 

#0 [internal function]: __lambda_func(Array) 
#1 /library/Zend/Controller/Router/Route.php(398): urlencode(Array, false, true) 
#2 /library/Zend/Controller/Router/Rewrite.php(441): Zend_Controller_Router_Route->assemble(Array, NULL, false, true) 
#3 /library/Zend/View/Helper/Url.php(49): Zend_Controller_Router_Rewrite->assemble(Array) 

Si je retire l'étoile (*) de mon itinéraire personnalisé, aucune erreur aura lieu - mais les urls générés à mon avis ne sont alors pas correct, car ils ne seront pas concordant avec les paramètres de la requête:

$router->addRoute('controlleralias', new Zend_Controller_Router_Route(
    ':module/mycontrolleralias/:action', 
    array(
     'module'  => 'mymodule', 
     'controller' => 'mycontroller', 
     'action'  => 'myaction' 
    ) 
)); 

J'ai aussi trouvé que si Je ne suis pas passe dans un tableau pour un paramètre, il ne génère une erreur:

$this->view->url(array('sort' => 'param1')); 

Malheureusement j'ai besoin de passer dans un tableau pour « sort » (comme indiqué ci-dessus)

Est-ce que quelqu'un sait ce que je fais mal? Peut-être y a-t-il un moyen plus facile d'y parvenir?

J'utilise Zend Framework 1.9.0

Répondre

0

Je pense que vous devriez faire quelque chose comme ça,

$this->view->url(array('sort' => 'param1,param2'),'controlleralias'); 

également les paramètres ne peuvent pas être des tableaux puisque le sont basés à urlencode comme cela.

+0

Merci, mais il donne toujours l'erreur. J'ai également trouvé si je ne passe pas un tableau de valeurs pour 'sort' cela fonctionnera aussi (voir la question mise à jour) – asgeo1

+0

ouais désolé aussi faire un sens les params ne peuvent pas être des tableaux – RageZ

+0

Le routeur standard supporte les tableaux pour les valeurs des paramètres, et va générer l'URL correcte. Mais si j'utilise une valeur séparée par virgule, il ne sera pas construire une URL correcte. C'est à dire. Je reçois/mymodule/mycontrolleralias/myaction/sort/param1% 2Cparam2 au lieu de/mymodule/mycontrolleralias/myaction/sort/param1/sort/param2 C'est juste Zend_Controller_Router_Route qui semble les traiter différemment et jette l'erreur quand j'essaye pour construire mon alias route :( – asgeo1

Questions connexes