Bonjour, j'ai suivi le tutoriel pour développer un site et depuis, je l'utilise pas mal dans mes projets...
Mais aujourd'hui, je me retrouve avec un problème sur les bras : Lorsque je veux ajouter un url personalisée à une url préfixée, le préfixe passe mais pas le reste...
Je m'explique plus clairement. J'ai dans mon fichier conf.php ces deux lignes :
<?php
Router::prefix('zone-membre', 'member');
Router::connect('member/users/ajouts/:slug-:id', 'member/users/ajouts/id:([0-9]+)/slug:([a-z0-9\-]+)');
?>
Du coup, dans mon fichier UsersController.php, j'ai écrit la fonction :
<?php
function member_ajouts($idCat = '', $slugCat = '') {
//...
}
?>
Mais la valeur de la variable $idCat contient tout et la variable $slugCat rien.
Par exemple pour cette adress : /zone-membre/users/ajouts/telechargements-6, $idCat contient 'telechargements-6' et $slugCat null...
Bonjour,
La méthode Router::connect ne fonctionnera pas comme cela il me semble ..
Essai :
<?php
Router::connect('/member/users/ajouts/:slug-:id', array(), array('pass'=> array('id', 'slug'), 'id' => '[0-9]+', 'slug' => '[a-z0-9\-]+'));
/**
* Le second paramètre peut reste un array vide..
*
* C'est le 3ème paramètre qui va t'intéresser ici :
* Tu y déclare les paramètres supplémentaires que tu envoi et, pour chaque paramètre, tu y défini le regex pour que le router parse l'url
* comme il faut
*/
?>
En espérant que cela te vienne en aide dans ton projet et débloque ton problème..
Documentation :
http://book.cakephp.org/2.0/en/development/routing.html#router-api
NB :
Ce sujet aurait mieux trouvé sa place dans la section CakePHP du Forum ;)
Bonjour, je parle de la série de vidéo pour la création d'un site sans cakePHP ( Tuto). Je n'ai donc pas posté cette question dans le forum de cake...
Cordialement,
bendem
Bonsoir,
J'avais bien compris qu'il s'agissait des tutos sur CakePHP :) Mais les lecteurs du topic du Framework seraient plus disposés à y répondre (des sujets sur ces tutos y sont déjà) ... Enfin bref...
Ma solution résout ton problème de la même façon ... il y a plusieurs façons de faire du Cake (comme en cuisine :P) ... cela ne casse en rien le déroulement du tuto si tu place mon Router::connect à la place du tiens...
Tu peux toujours commenter l'une ou l'autre des lignes et voir laquelle s'approche au mieux du comportement souhaité..
Bonne continuation pour le visonnage de la suite des tutos ;)
Autant pour moi, j'avais lu en diagonale "...] pour la création d'un site <u>sans</u> cakePHP ...]" .. Et je n'ai pas non plus vu la série de vidéo dont tu parle ....
Donc quand j'ai vu "Router::connect" j'ai supposé CakePHP car il s'agit de la syntaxe de ce Framework concernant le routage.
J'espère que tu trouvera une réponse à ton problème en tout cas ...
Je crois que le probléme vient au niveau de ton Dispatcher.php ou la fonction call_user_func_array existe.
Bref, pose le constructeur de ton dispatcher ici
Voici mon Controller.php, mon Router.php et mon Dispatcher.php.
Quand à l'initialisation de mon Dispatcher : http://pastie.org/4876465
Voila c'est comme je disais, le problème vient de la fonction call_user_func_array dans le Dispatcher
Tu met sur le deuxième paramètre
current($this->request->params)
ce qui indique qu'il va prend seulement la première valeur du tableau $this->request->params
voila le code exact ( supprimer le current() )
call_user_func_array(array(
$controller,
$action
),
$this->request->params
);
Bonne chance.
Mmh, non, ce n'est pas ça... Le current me permet de récupérer les variables passée en paramètre au controller, non pas dans un tableau, mais comme une fonction classique... J'ai quand même testé sans, mais ça ne marche pas. Je pense que la fonction Router::connect ne prend pas en compte les préfixes ajouter grâce à la fonction Router::prefix... Mais je ne sais pas comment la modifier.
Cordialement,
bendem