Retourner à la page précédente avec Laravel

Il y a de nombreuses figures de cas où une application doit retourner à la page précédente. Ce sera le cas, par exemple, lorsqu'on modifie un produit en cliquant sur le bouton de modification sur sa fiche. On voudra revenir à cette fiche une fois la modification faite.

Dans cet article, je vous montre comment retourner à la page précédente dans une application Laravel ou encore comment retrouver l'adresse relative ou absolue de la page précédente.

▼Publicité

La façon la plus facile pour retourner à la page précédente est d'utiliser la fonction back() :

Contrôleur Laravel (PHP)

return back();

La méthode redirect() permet également d'y parvenir. On devra lui passer en paramètre l'URL de la page précédente à l'aide de url()->previous().

Contrôleur Laravel (PHP)

return redirect(url()->previous());

URL de la page précédente

Et si on avait besoin de connaître l'URL de la page précédente sans pour autant faire une redirection immédiatement ?

Laravel saura retrouver d'où on vient à l'aide de l'instruction suivante :

Contrôleur Laravel (PHP)

$precedent = back()->getTargetUrl();

Si la page précédente était la page d'accueil, la variable $precedent vaudra http://mondomaine.com. Si c'était la page de contact, elle vaudra http://mondomaine.com/contact.

URL de la page précédente sans le nom de domaine

Il n'existe pas de fonction préprogrammée pour trouver l'URL de la page précédente sans le nom de domaine. Qu'à cela ne tienne, il est possible d'utiliser la fonction PHP preg_replace() pour faire le travail.

Avec l'instruction suivante, si la page précédente était la page d'accueil, la variable $precedent vaudra /. Si c'était la page http://mondomaine.com/contact, elle vaudra contact.

Ce comportement est cohérent avec les résultats obtenus quand on recherche l'URL de la page actuelle sans le nom de domaine. 

Ex :

Contrôleur Laravel (PHP)

$precedent = url()->previous() == url('/') ? '/' : preg_replace('@' . url('/') . '/@', '', url()->previous());

Quelques explications s'imposent.

  • le premier paramètre de preg_replace() est le patron à rechercher, que l'on doit entourer par un délimiteur. Le caractère @ a été choisi mais tout autre caractère non utilisé dans le patron aurait pu faire l'affaire.
  • la fonction url('/') retourne une chaîne sous la forme « http://mondomaine.com ». Donc, si on enlève cette chaîne de l'URL, on aura « /contact » plutôt que « contact », comme désiré. C'est pourquoi il a fallu ajouter un « / » avant le dernier délimiteur.
  • Lorsque la page précédente est la page d'accueil, on veut conserver le « / ». C'est pourquoi on a ajouté un opérateur ternaire (?:) afin d'avoir un traitement différent pour la page d'accueil.

Si vous avez à travailler régulièrement avec l'URL de la page précédente sans le nom de domaine, je vous conseille fortement de placer cet extrait de code dans un bibliothèque de fonction afin de rendre votre code plus clair et faciliter la maintenance de vote application Web.

Catégories