Gérer un retour vers la page précédente : Controller::referer()

CakePHP est livré avec un grand nombre de fonctions utiles qu’il faut découvrir. En tant que développeurs, vous avez j’imagine déjà dû mettre en place un lien « Retour » ou quelque chose du genre n’est-ce pas ?

Le problème posé est souvent : comment retourner proprement a une page qui a des paramètres (exemple la pagination de CakePHP), comment ne pas faire « ressortir » le visiteur ayant atterri sur cette page, comment rendre ma bidouille plus propre …

La réponse grâce à CakePHP : Controller::referer()

Plusieurs solutions existent et sur lesquelles on peut se baser :

  • la variable $_SERVER['HTTP_REFERER'] de php
  • un petit bout de javascript : document.location(-1)
  • utiliser les sessions
  • … ou d’autres solutions sur mesure avec des fonctions trouvées à droit ou à gauche que l’on essaye de faire fonctionner !

Je me propose ici de vous présenter la méthode Controller::referer() livrée avec Cake … tout simplement car je la trouve géniale !

La signature de la méthode

Pour savoir comment appeler la méthode, voici la signature de la fonction :

// Retrouve l'url référente de cette requête
Controller::referer($default = null, $local = false);

Paramètres :

  • string $default : URL par défaut à utiliser si on ne peut pas retrouver le HTTP_REFERER dans les en-têtes de la requête
  • boolean $local : Placer ce paramètre à true permet de restreindre l’url de retour au serveur local. Si l’utilisateur vient de l’extérieur il sera redirigé vers la page par défaut.

Retour :

  • string : L’adresse publique de retour

Une utilisation possible

Et voici la portion de code qui explique comment faire :

// Dans le fichier xxx_controller.php
$pageRetour = $this->referer(array('action'=>'index'), true);
$this->set('pageRetour', $pageRetour);
// Dans la vue associée
<?php echo $html->link(__('Retour à la page précédente', true), $pageRetour); ?>

L’utilisateur sera redirigé vers la page d’où il vient quels que soient les paramètres de celle-ci (en $_GET), sauf si il vient d’un site externe. Dans ce cas il ira vers la page par défaut i.e l’action « index ».

Pour finir, quelques applications utiles :

  • Retour vers une liste utilisant la pagination de CakePHP
  • Gestion des utilisateurs ayant désactivé Javascript
  • Proposer aux visiteurs entrant de continuer sans problème leur navigation sur le site

Pour aller plus loin

De la même manière, dans un espace d’édition d’enregistrement vous pouvez utiliser cette méthode en la combinant aux sessions. Pour en savoir plus, je vous invite à visiter l’article Revenir à la bonne page après l’édition d’un enregistrement sur Formation Cakephp.

Partagez avec vos amis !
  • del.icio.us
  • Twitter
  • Tumblr
  • Facebook
  • Digg
  • LinkedIn
  • Google Bookmarks
  • email
  • Technorati
  • Wikio FR
  • Netvibes
  • RSS
If you enjoyed this post, make sure you subscribe to my RSS feed!

Cet article a été publié dans En vrac avec les mots-clefs : , . Bookmarker le permalien. Laisser un commentaire ou faire un trackback : URL de trackback.
  • Très bonne initiative que d'avoir décortiqué cette fonction, je n'avais jamais vu qu'on pouvait lui passer des paramètres...
blog comments powered by Disqus
  • Speaker at the CakeFest 2010

    Creative Commons License


  • A lire aussi …