Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'essaie de générer une url avec un param 'toto':
$params['controller'] = $module.'-'.$controller;
$params['action'] = $action;
$params['toto'] = '99';
$url = $this->view->url('default',$params,array(),FALSE);
Mais l'url générée ne contient aucun paramètre toto !
Ensuite j'essaie de récupérer le parametre 'toto' de l'url /<namespace-controller>/<action>/toto/99
Et je tombe là dessus:
"An error occurred processing this page; please try again later.
Invalid exception found"
Comment peut-on gérer les paramètres de l'url?
David
Hors ligne
T'es où la ? Dans le contrôleur ou dans la vue ?
Hors ligne
Je suis dans un view helper:
namespace Mix\View\Helper; use Zend\View\Helper\AbstractHelper, Zend\View\Helper\Url; class SimpleUrl extends AbstractHelper { public function __invoke($module='application',$controller='index',$action='index',$params=array()) { $params['controller'] = $module.'-'.$controller; $params['action'] = $action; $params['toto'] = '99'; $url = $this->view->url('default',$params,array(),FALSE); } return $url; } }
Hors ligne
As-tu bien initialisé l'aide de vue Url dans la classe Module ?
Hors ligne
Oui ce helper est initialisé dans la config:
'view-loader' => array('parameters' => array( 'map' => array( 'simpleurl' => 'Mix\View\Helper\SimpleUrl', ), )),
D'ailleurs lorsque je commente
//$params['toto'] = '99';
et que je l'appelle dans la vue par
$this->simpleUrl('candidat,'catalogue','recherche');
Ca marche parfaitement bien.
C'est juste l'ajout de paramètres qui n'est pas pris en compte.
Dernière modification par booradley (17-11-2011 14:20:50)
Hors ligne
Haaa mais je crois savoir pourquoi ! A l'heure actuelle je suppose que tu utilises la route "Segment" ? Elle ne supporte pas encore les wildcards (donc les paramètres controller/action/param1/valeur1/param2/valeur2...). Normalement je sais pas ou ça en est mais la solution ce sera de faire un child_routes et d'ajouter la route "Wildcard".
Ca devrait pas tarder à fonctionner, ça fonctionne peut-être même déjà .
PS : juste, quand tu vas mettre à jour ZF2 avec le dernier dépôt, ton code marchera plus, y'a quelques modifications à faire au niveau des modules qui les rends un peu plus simple à utiliser.
Hors ligne
Oui effectivement j'utilise la route Segment.
Je vais attendre la correction soit dispo.
Merci bakura.
Hors ligne
Sinon, je te conseille vraiment d'installer IRC (si t'es sous Mac => Textual, le meilleur client IRC du monde ), et va sur le channel zftalk.2 sur le serveur Freenode. T'as constamment tous les développeurs du framework, tu pourras poser tes questions, et toutes les 2 semaines il y a le meeting ZF2 (les dates sont sur le wiki) ou ça discute de l'avancée des composants. C'est toujours super intéressant pour suivre l'avancée du projet .
Hors ligne
Je viens d'installer ca , merci pour l'info
David
Hors ligne
Bonjour,
Je reviens sur ce pb de paramètres dans l'url.
J'apelle l'url :/membre-identification/login/titi/9/rer/pouf
Dans mon controlleur j'ai:
$request = $this->getRequest(); //$request = new \Zend\Http\PhpEnvironment\Request(); //$parameters = new \Zend\Stdlib\Parameters(); //\Zend\Debug::dump($parameters); \Zend\Debug::dump($request->query()->toArray()); // => tableau vide ! \Zend\Debug::dump($request->query()->get('titi')); // => null !
Je ne parviens pas à récupérer les paramètres de l'url....
Hors ligne
Bonjour booradley,
As-tu réussi a résoudre ton problème de paramètre ? Car j'ai le même problème que toi. J'aimerai faire passer simplement des paramètres dans l'URL mais mon ViewHelper ne doit pas être bon.
Où est-ce que vous avez vu le type de route nommé Segment ?
D'avance merci
Dernière modification par akrogames (27-11-2011 11:59:23)
Hors ligne
Je n'ai toujours pas résolu ce pb.
Je pense que ma route n'est pas bonne.
Tu peux lire le sujet "routage" de ce forum
http://www.z-f.fr/forum/viewtopic.php?id=7086
Hors ligne
J'ai pas trop réessayé (pour l'instant je me suis rabattu sur une solution "à la noix" dans laquelle j'écris à la main dans la vue les url (avec pour les variables GET la forme "à l'ancienne" : /controller/index?var1=val1&var2=val2, et là on peut bien récupérer les valeurs).
Par contre, pensez bien à mettre très régulièrement à jour votre code avec le repo, ne serait-ce que les modules qui ont connu quelques améliorations depuis la bêta 1. Le routeur aussi a connu pas mal de changements !
Hors ligne
Voici la bonne route qui m'a été donnée par jurians sur l'irc:
https://gist.github.com/758515e55ae3fb397350
De plus :
- $this->getRequest()->query() permet de récupérer les paramètres dans l'url du type ?param1=value1
Si on veut récupérer des paramètres dans l'url du type /param1/value1 il faut utiliser:
- $this->getEvent()->getRouteMatch()->getParams()
Voila
++
Hors ligne
Ce qu'il faut aussi savoir, quand on utilise la route suivante:
'default' => array( 'type' => 'segment', 'options' => array( 'route' => '/[:controller[/:action]]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]+', 'action' => '[a-zA-Z][a-zA-Z0-9_-]+', ), 'defaults' => array( 'controller' => 'index', 'action' => 'index', ), ), 'may_terminate' => true, 'child_routes' => array( 'wildcard' => array( 'type' => 'wildcard' ), ), );
C'est qu'on doit nommer la route 'default/wildcard' (et non 'default') lors de l'appel du plugin url par exemple:
$params['controller'] = $namespace.'-'.$controller; $params['action'] = $action; echo $this->plugin('url')->fromRoute('default/wildcard',$params);
Hors ligne
Ok, merci beaucoup ! La syntaxe est quand même bizarre pour $this->getEvent()->getRouteMatch()->getParams() . C'est un peu verbeux quand même ...
Hors ligne
J'ai remonté ce bug a DASPRiD:
http://framework.zend.com/issues/browse/ZF2-112
Il n'a pas de solution pour le moment.
On peut commenter la route par default en attendant:
/*
'defaults' => array(
'controller' => 'index',
'action' => 'index',
),
*/
Hors ligne