RSS
 

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

18 déc

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.

Pensez à utiliser mon flux RSS pour vous tenir au courant des futurs articles ! Vous pouvez aussi me retrouver sur Twitter pour une actualité plus fréquente.

 
3 Comments

Posted in En vrac

 

Tags: ,

  • http://www.formation-cakephp.com Kalt

    Très bonne initiative que d’avoir décortiqué cette fonction, je n’avais jamais vu qu’on pouvait lui passer des paramètres…

  • Pingback: CakePHP : signets remarquables du 18/12/2008 au 23/12/2008 | Cherry on the...

  • seb

    bonjour, très intéressant comme tuto j'aimerais savoir comment tu fais un simple lien entre 2 page en utilisant le router dans app/config/routes, une fois celui ci reconfiguré avec le chemin de chaque pages, comment les lier entres elles ?