Question

c'est mon premier post ici:)

Je vais avoir quelques difficultés à traiter avec urls et paramètres. Je suis passé par la classe routeur documentation api maintes et maintes fois et n'a rien trouvé utile.

Tout d'abord, je voudrais savoir s'il y a un format « universel » dans CakePHP (1.3) pour le traitement des urls. Je me occupe actuellement tous mes urls sous forme de tableaux simples (dans le format Router :: url et $ html-> link accepte) et il est facile aussi longtemps que je ne dois les arguments à passer comme propres méthodes de gâteau. Il devient généralement difficile si je besoin d'autre chose.

Principalement je vais avoir des problèmes avec la conversion urls de chaîne au format du tableau de base. Disons que je veux convertir arrayUrl $ à 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. En outre, notez que $ parser est toujours pas le même que $ arrayUrl. Bien sûr, je pourrais modifier $ manuellement et analysable en fait je l'ai fait quelques fois comme un patch rapide, mais je voudrais aller au fond de cela.

J'ai aussi remarqué que lorsque vous utilisez le routage de préfixe, $ this-> params dans le contrôleur a le préfixe intégré dans l'action (i.e.. [Action] => « admin_editer ») et le résultat du routeur :: parse () ne fonctionne pas. Les deux ont bien sûr le préfixe propre clé de lui.

Pour résumer, comment puis-je convertir une url entre l'un de ces 3 (ou 4, si vous incluez la chose préfixe) mentionné formats de la bonne façon? Bien sûr, il serait facile de pirater mon chemin à travers, mais je voudrais encore croire que le gâteau est développé par un groupe de personnes qui ont beaucoup plus d'expérience et la perspicacité que moi, donc je suppose qu'il ya un bon raison de 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 en anglais rouillées, je devais prendre quelques détours :) Je vais vous expliquer plus si nécessaire.

Était-ce utile?

La solution

Le format « officiel » pour les URL gâteau devrait être la notation de tableau array('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true). Chaque fois que vous écrivez des URL, vous devez utiliser ce format. La classe routeur se traduira par ceux des chaînes (soit /admin/foo/bar/baz) ou des informations nécessaires à la Dispatcher (array('named' => array(), 'pass' => array(), …)), selon l'endroit où l'URL est utilisée.

Vous devriez penser en termes duquel l'action contrôleur que vous souhaitez appeler. URL (sous forme de chaînes) ne sont un mal nécessaire pour y parvenir dans un contexte Web. Il ne devrait pas y avoir de besoin pour vous d'utiliser le format Dispatcher. Vous ne devriez pas utiliser la notation de chaîne lors de la spécification des URL, puisque ceux-ci ne peuvent pas être inversée routés si jamais vous voulez changer votre schéma d'URL.

Peut-être pourriez-vous expliquer avec un exemple pourquoi vous avez besoin de convertir ces trois formes de l'un à l'autre?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top