17-04-2012, 12:39 PM
(Modification du message : 17-04-2012, 12:55 PM par Sephi-Chan.)
L'URL rewriting, c'est le routeur du pauvre. Mais l'idée y est.
Le routeur, c'est un composant qui permet d'associer une route à quelque chose : généralement l'action d'un contrôleur.
Voici un exemple de table de routage d'une application Rails.
Ça permet d'avoir des routes propres et générées (ce qui permet de les changer/traduire/autre sans avoir à modifier le code).
Prenons une ligne de cette table :
Quand le visiteur arrive dans l'application par un chemin de cette forme, c'est l'action
Ensuite, pour générer un lien vers une gallerie, je pourrais faire quelque chose comme :
L'avantage, c'est que ça gère même le format de la requête. Si je veux un autre format que du HTML classique (du JSON pour une requête AJAX, une image pour un avatar, etc.), je peux ajouter spécifier un format de retour sera capable de savoir ce que je souhaite en sortie et faire des choses différentes selon les cas.
Note que la méthode
Le routeur, c'est un composant qui permet d'associer une route à quelque chose : généralement l'action d'un contrôleur.
Voici un exemple de table de routage d'une application Rails.
Ça permet d'avoir des routes propres et générées (ce qui permet de les changer/traduire/autre sans avoir à modifier le code).
Prenons une ligne de cette table :
Citation :user_gallery GET /users/:user_id/galleries/:id(.:format) galleries#show
Quand le visiteur arrive dans l'application par un chemin de cette forme, c'est l'action
show
du contrôleur galleries
qui est appelée. Ce qu'il y a la place des placeholder est transmis sous forme de paramètre GET : si je vais sur /users/42/galleries/24?foo=bar, dans mon action de contrôleur, j'aurais à ma disposition un hash nommé params
qui aura la forme (j'ai mis un paramètre GET classique juste pour l'exemple) :
{ user_id: 42, id: 24, foo: 'bar' }
Ensuite, pour générer un lien vers une gallerie, je pourrais faire quelque chose comme :
@user = User.find(42)
@gallery = @user.galleries.find(24)
link_to user_gallery_url(@user, @gallery, foo: 'bar') # => http://.../users/42/galleries/24?foo=bar
link_to user_gallery_url(@user, @gallery, foo: 'bar', format: :json) # => http://.../users/42/galleries/24.json?foo=bar.
L'avantage, c'est que ça gère même le format de la requête. Si je veux un autre format que du HTML classique (du JSON pour une requête AJAX, une image pour un avatar, etc.), je peux ajouter spécifier un format de retour sera capable de savoir ce que je souhaite en sortie et faire des choses différentes selon les cas.
Note que la méthode
link_to
appelle la méthode to_param
sur les objets qu'on lui donne (ici @user
et @gallery
) pour savoir quoi mettre à la place du placeholder. Ça permet de faire des URL propres, genre : http://.../users/42-php-addict/galleries/24.