Le plugin SimpleUrl pour écrire rapidement des url
Marre de passer d’interminables tableaux aux méthodes Html->link ou Html->url ? Ce plugin propose un moyen plus rapide pour écrire les url dans CakePHP. Attention, le plugin requiert PHP version 5.3 au minimum.
Installation
Cloner depuis le dépôt sur github :
git clone git://github.com/kalt/simple_url.gitOu télécharger l’archive et l’extraire dans le répertoire
{app}/plugins/simple_url
Configuration
Ajoutons simplement la ligne suivante avant la déclaration de la classe AppController :
<?php // {app}/app_controller.php App::import('Lib', 'SimpleUrl.Url'); class AppController extends Controller { ...
Utilisation
Nous pouvons maintenant appeler depuis n’importe quel endroit de notre application :
Url::plugin_controller_prefix_action($args);
Exemples
/posts echo $this->Html->url(array( 'controller' => 'posts', 'action' => 'index' )); Devient : echo Url::posts_index(); Ou encore plus rapide : echo Url::posts();
/posts/download/1 echo $this->Html->url(array( 'controller' => 'posts', 'action' => 'download', $post['Post']['id'] )); Devient : echo Url::posts_download($post['Post']['id']);
/posts/view/1/number-one-slug echo $this->Html->url(array( 'controller' => 'posts', 'action' => 'view', 'id' => $post['Post']['id'], 'slug' => $post['Post']['slug'] )); Devient : echo Url::posts_view(array( 'id' => $post['Post']['id'], 'slug' => $post['Post']['slug'] ));
/admin/posts/edit/1 echo $this->Html->url(array( 'controller' => 'posts', 'action' => 'edit', 'admin' => true, $post['Post']['id'] )); Devient : echo Url::posts_admin_edit($post['Post']['id']);
/my_plugin/beers/drink/qty:1 echo $this->Html->url(array( 'plugin' => 'my_plugin', 'controller' => 'beers', 'action' => 'drink', 'qty' => 1 )); Devient : echo Url::my_plugin_beers_drink(array('qty' => 1));
/customer/my_plugin/beers/buy/1 echo $this->Html->url(array( 'plugin' => 'my_plugin', 'controller' => 'beers', 'action' => 'buy', 'customer' => true, $beer['Beer']['id'] )); Devient : echo Url::my_plugin_beers_customer_buy($beer['Beer']['id']);
Commentaires
9 septembre 2011 à 16:02
Bonjour Pierre-Emmanuel,
Je voulais juste faire une petite critique concernant ce plugin.
Je pense que niveau performance celui-ci est moins bon que l’utilisation normal du helper et qu’il n’est pas pour autant mieux lisible/compréhensible.
J’aurais plutôt vu dans l’idée quelque chose comme le propose Lithium du style:
9 septembre 2011 à 16:23
Toutes les idées se défendent, tant qu’on y trouve un avantage. L’idée de départ était simplement de ne plus avoir à répéter ‘controller’, ‘plugin’, ‘action’, ‘admin’, etc. dans les array.
11 septembre 2011 à 22:53
Y’a-t-il un avantage par rapport au passage d’une chaîne de caractères à la méthode url(), tel que ci-dessous ?
11 septembre 2011 à 23:00
L’avantage c’est que l’on conserve le reverse routing ! En écrivant comme tu le fais, tu « figes » l’url et tu ne peux plus la changer en créant une route dans le fichier config/routes.php. Quand tu passes un array ou que tu utilises ma classe, tu peux écrire une route qui va modifier l’apparence de ton url.
Cela dit, dans ton cas on se trouve dans une admin, où l’apparence des url n’a qu’un intérêt très limité, on peut donc se limiter à ta notation sans trop de risque, mais on ne sait jamais, j’ai connu un client qui voulait réécrire les url pour l’admin aussi…
12 septembre 2011 à 8:39
OK, merci pour ta réponse. Je connaissais la différence sur la méthode url(), mais c’est bien de savoir que ton plugin en tient compte.
Tu devrais d’ailleurs peut-être le mentionner, parce que c’est à mon avis ce qui fait son intérêt du coup.
Et oui, il y a des clients qui ont des demandes disons… intéressantes !
29 septembre 2011 à 0:00
[...] Formation CakePHP » Archive du blog » Le plugin SimpleUrl pour écrire rapidement … [...]
29 janvier 2012 à 16:19
Ca a l’air rudement sympa, par contre, galère de newbie, je n’arrive pas à l’utiliser.
Quel est l’emplacement exact? app/plugins/simple_url/?
Merci,
Isabelle,
30 janvier 2012 à 1:12
Oui c’est cela. L’arborescence finale doit être app/plugins/simple_url/libs/url.php
30 janvier 2012 à 17:31
aaaah ok, il me manquait le /libs/
Merci! Je teste ça ce soir