c'est mon premier article ici :)Quelle est la bonne façon d'utiliser les URL de Cakephp?
J'ai des difficultés à gérer les URL et les paramètres. J'ai parcouru la documentation api de classe de routeur encore et encore et n'ai trouvé rien d'utile. Tout d'abord, j'aimerais savoir s'il y a un format 'universel' dans CakePHP (1.3) pour gérer les URLs. Je gère actuellement toutes mes urls sous la forme de tableaux simples (au format que Router :: url et $ html-> link acceptent) et c'est facile tant que je n'ai besoin que de les passer en arguments des propres méthodes de cake. Cela devient généralement difficile si j'ai besoin d'autre chose. Principalement, j'ai des problèmes avec la conversion d'URL de chaînes au format de tableau de base. Disons que je veux convertir arrayUrl de $ à chaîne et à nouveau dans url:
$arrayUrl=array('controller'=>'SomeController','action'=>'someAction','someValue');
$url=Router::url($arrayUrl); //$url is now '/path/to/site/someController/someAction/someValue'
$url=Router::normalize($url); //remove '/path/to/site'
$parsed=Router::parse($url); /*$parsed is now
Array(
[controller] => someController
[action] => someAction
[named] => Array()
[pass] => Array([0] => someValue)
[plugin] =>
) */
Cela semble énormément de code pour faire quelque chose d'aussi simple que de convertir entre 2 formats de base. Notez également que $ parsed n'est toujours pas identique à $ arrayUrl. Bien sûr, je pourrais ajuster $ $ manuellement et en fait j'ai fait ça quelques fois pour un correctif rapide mais j'aimerais aller au fond des choses. J'ai également remarqué que lors de l'utilisation de routage de préfixe, $ this-> params dans le contrôleur a le préfixe intégré dans l'action (ie [action] => 'admin_edit') et le résultat de Router :: parse() n'est pas . Les deux ont bien sûr le préfixe dans sa propre clé. Pour résumer, comment puis-je convertir un URL entre l'un de ces 3 (ou 4, si vous incluez le préfixe chose) les formats mentionnés dans le bon sens? Bien sûr, il serait facile de me frayer un chemin à travers cela, mais j'aimerais quand même croire que le gâteau est développé par un groupe de personnes qui ont beaucoup plus d'expérience et de perspicacité que moi, donc je suppose qu'il y a un bonne raison pour cette "mauvaise conduite perçue".
J'ai essayé de présenter mon problème aussi bien que possible, mais en raison de mes compétences rouillées en anglais, j'ai dû faire quelques détours :) Je vais expliquer plus si nécessaire.
Merci pour la réponse rapide. J'ai demandé cela parce que pas une fonction de gâteau sigle que je connais retourne ce format (tableau). En l'absence d'un exemple réel, utilisons $ controller-> referer(). Le résultat de referer() est string, que j'ai besoin de convertir en tableau pour le modifier. Le seul moyen que je connaisse est Router :: parse(), qui retourne les paramètres du répartiteur. Si je voulais comparer le résultat à une URL de tableau, je devrais aussi convertir l'URL du tableau en paramètres du répartiteur, ce qui est fait via Router :: parse (Router :: normalize (Router :: url ($ arrayUrl))). Pas bon. – jpeltoniemi
@Pichan Le référent est un cas intéressant en ce sens que c'est à la fois quelque chose que vous voudrez peut-être analyser, mais en même temps quelque chose que vous ne devriez pas faire attention à la première place. Puisque vous êtes vraiment en manque d'exemple, il semble que mon conseil soit valable. :) – deceze
Disons que je dois enregistrer l'URL actuelle dans la session, donc quand une certaine tâche est terminée, le visiteur est ramené à la page d'où provient la tâche. Jusqu'à présent, j'utilisais $ this-> params, ce qui n'est pas la même chose que les URL de tableau, donc peu de bricolage est nécessaire pour les rendre sympas. Je veux juste éviter d'avoir à coder en dur les URL qui sont déjà disponibles pour le contrôleur dans un certain format. Je commence à penser que Cake ne travaillera pas avec moi sur celui-ci, mais est-ce seulement Cake ou est-ce que ma pensée est défectueuse? Après tout, je suis plutôt vert à toute la chose MVC donc ce ne serait pas une surprise :) – jpeltoniemi