Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonsoir à tous,
J'aimerais rendre un de mes modules accessible mon application par deux routes différentes ayant 2 paramètres optionnel.
Voici les urls que j'aimerais pouvoir consulter :
/users qui renvoi la liste de tous mes utilisateurs
/users/1 renvoi seulement mon utilisateurs 1
/users/1/structures qui renvoi la liste des structures pour l'utilisateur 1.
/users/1/structures/2 qui renvoi la structure 2 de l'utilisateur 1
Que pensez vous de la construction de ma route ?
[lang=php] 'users' => array( 'type' => 'Segment', 'options' => array( 'route' => '/users[/:id]', 'constraints' => array( 'id' => '[0-9]+', ), 'defaults' => array( 'controller' => 'User\Controller\UsersController' ), ), 'may_terminate' => true, 'child_routes' => array( 'structures' => array( 'type' => 'Segment', 'options' => array( 'route' => '/structures[/:idStructure]', 'constraints' => array( 'idStructure' => '[0-9]+', ), 'defaults' => array( 'controller' => 'User\Controller\UsersStructuresController' ), ), ), 'consolidation' => array( 'type' => 'Segment', 'options' => array( 'route' => '/consolidations[/:idConsolidation]', 'constraints' => array( 'idConsolidation' => '[0-9]+', ), 'defaults' => array( 'controller' => 'User\Controller\UsersConsolidationsController' ), ), ) ) ),
Pourquoi dans ce code, si j'appelle l'url : /users/1/structures/2 présent dans mon controller Rest $id vaut le id de l'user et pas celui de la structure ?
[lang=php] /** * Return single resource * * @param mixed id * @return mixed */ public function get($id) { $idUser = $this->params("idStructure"); $jsonModel = new JsonModel(array("Je suis dans le get id qui vaut ".$id. " le idUser quand a lui vaut " . $idUser)); return $jsonModel; }
Pourquoi quand je tape /users/1/structures je ne rentre pas dans ma méthode getList de mon controller Rest ?
[lang=php] /** * Return list of resources * * @return mixed */ public function getList() { $idUser = $this->params("idStructure"); $jsonModel = new JsonModel(array("Je suis dans le getList " .$idStructure)); return $jsonModel; }
J'espère que j'ai été suffisament précise dans ma question. N'hésite pas à me demander si vous avez besoin d'information supplémentaire.
Merci d'avance pour vos réponses.
Hors ligne
Salut, les routes semblent correctes à première vue. par contre pour tes variables j'ai un truc qui me chagrine :p.
lucie a écrit:
$idUser = $this->params("idStructure");
Ca vient peut être de là le problème ?
Hors ligne
Oui effectivement je me suis trompée sur le nom de la variable.
Merci Orkin.
Mon but était de pouvoir récupérer les deux id...
Mais j'ai modifié le code de ma fonction get
[lang=php] /** * Return single resource * * @param mixed id * @return mixed */ public function get($idStructure) { $idUser = $this->params("id"); $jsonModel = new JsonModel(array("Je suis dans le get id qui vaut ".$idStructure. " le idUser quand a lui vaut " . $idUser)); return $jsonModel; }
Mais j'ai toujours un problème, $idUser == $idStructure
Et lorsque j'appelle /users/1/structures il rentre encore dans la méthode get($i) plutôt que getList() =S
Dernière modification par lucie (12-04-2013 18:01:13)
Hors ligne
C'est bon j'ai trouvé la solution (Merci Bakura)
J'ai sortie la route structures de la route Users et j'ai explicitement donnée le nom de mes paramètres.
[lang=php] 'structures' => array( 'type' => 'Segment', 'options' => array( 'route' => '/users/:idUser/structures[/:id]', 'constraints' => array( 'id' => '[0-9]+', 'idUser' => '[0-9]+', ), 'defaults' => array( 'controller' => 'User\Controller\UsersStructuresController' ), 'may_terminate' => true, ), ),
Hors ligne
Pages: 1