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.git

  • Ou 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']);
Pierre-Emmanuel Fringant

Articles connexes

Commentaires

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:

$this->Html->url('Posts');
$this->Html->url('Posts::add');
$this->Html->url(array('Posts::view', $id));
$this->Html->url(array('Posts::view', 'admin' => true, 'id' => $id));

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.

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 ?

echo $this->Html->url('/admin/posts/edit/1');

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…

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 ! ;-)

[...] Formation CakePHP » Archive du blog » Le plugin SimpleUrl pour écrire rapidement … [...]

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,

Oui c’est cela. L’arborescence finale doit être app/plugins/simple_url/libs/url.php

aaaah ok, il me manquait le /libs/

Merci! Je teste ça ce soir :)

Participez

Pour insérer une portion de code, utilisez <pre lang="php">...</pre>