Bonjour,

La fonction back créer une nouvelle réponse de redirection à l'emplacement précédent, jusque là je ne vous apprends rien, mais je également envoyé un message flash, mais je n'y arrive pas

J'ai beau créer un Session::flash(), je ne le retrouve pas. Je pense donc que même si je créer se message flash, la fonction back() n'en tient pas compte

Je cherche donc à retourner sur la page précédente, en affichant un message flash. Mais le problème est que l'appel du controlleur en question, peut être fait de plusieurs page, d'ou l'utilisation du back, vu qu'on ne peut pas se fier au $_SERVER['HTTP_REFERER']

Si quelqu'un à des suggestion, elle sera la bien venue.
Merci d'avance pour vos réponses.

19 réponses


betaWeb
Réponse acceptée

Il te faudrait récupérer le referrer ($referrer = Request::referrer() ou $referrer = url()->previous() je ne sais plus) à ce moment là et rediriger à la mano vers celui-ci (return redirect($referrer)->with(...);). Je n'ai pas testé par contre.

J'ai jamais essayé un back mais je pense que cela devrait fonctionner :

return redirect()->back()->with('errors', ['Message errors']);

Bonjour,
Merci pour ta réponce tom49, mais j'ai déjà essayé, mais cela ne fonctionne pas.
Je veux dire par là que la redirection fonctionne bien, mais j'ai pas ma session flash, par contre si je troc la function back() par une fonction action(), je la récupère bien.

Salut,

Tu as essayé return redirect('back')->with('errors', [...]); ?
Ou encore

$request->session()->flash('errors', [...]);

return back();

?

Bonjour,
La première solution que tu me proposes n'est pas possible, en ce qui concerne la seconde, oui j'ai déjà essayé, mais je ne récupère pas la session flash.
j'ai même essayé ceci, mais cela ne fonctionne pas :

Session::flash('addBasket', 'Produit ajouté au panier');

        return back();

Par contre avec :

dd(back()->headers);

j'arrive à récupérer ceci :

ResponseHeaderBag {#297 ▼
  #computedCacheControl: array:1 [▶]
  #cookies: []
  #headerNames: array:2 [▶]
  #headers: array:2 [▼
    "cache-control" => array:1 [▶]
    "location" => array:1 [▼
      0 => "http://xxxxxxx/xxx/home"
    ]
  ]
  #cacheControl: []
}

Donc je peux savoir d'où viens l'appel à la fonction, mais voilà, je n'arrive pas à récupérer seulement la primère ligne de "location".
Car la fonction back(), me renvoie à cette url.

Pourquoi la première "n'est pas possible" ?

Parce que laravel va chercher l'url ou le nom 'back'

Peut-être ceci alors

return redirect()->back()->withErrors('errors', [...]);

Cela ne fonctionne pas non plus.
J'ai l'impression que tout ce qui se passe après le back() n'est pas pris en compte.
Mais même en déclarant la session flash avant le back(), la session n'est pas prise en compte.

Pourtant tout est dans la documentation. Tu es sur quelle version de Laravel ?
Tu pourrais nous coller le code de la méthode qui pose souci ?

Je suis la version 5.3
Pour le moment le controller est en cours de construction mais le voici :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;

class BasketController extends Controller
{
    public function addOneProduct($id, $slug)
    {
        Session::flash('addBasket', 'Produit ajouté au panier');

        return back();
    }

    public function addProduct()
    {

    }

    public function deleteOneProduct($id, $slug)
    {

    }

    public function deleteProduct()
    {

    }

    public function show()
    {

    }

    public function delete()
    {

    }
}

Tu devrais utiliser le helper $request->session() au lieu de la facade. Et c'est impératif de rediriger vers la route back ? Tu peux aussi rediriger vers une route voir si tu obtiens le même résultat?

L'helper session(), oki je vais y regarder.
Bah le soucis ils veulent que je retourne sur la page d'ou a été fait l'appel à la fonction ajout au panier, et j'ai plus de 5 pages différents qui peuvent faire cet appel.

Cool merci je vais regarder, mais c'est exatement cela que je cherche à faire.
Je reviens vers toi pour te donner la soluce une fois que j'aurais trouver.

Par contre tu peux etre plus précis sur l'helper session() stp

C'est bien la documentation que j'ai lu, mais je dois avoir un soucis ailleurs, car j'ai une erreur : Session store not set on request..
Je regarde s'il faut déclarer un session start quelque part

En tout cas la solution à mon problème est ton deuxième choix :

$referrer = url()->previous()

Merci beaucoup;

Content d'avoir pu t'aider ;)
Pour ton souci de Session store, 2 pistes : soit les droits sur le dossier Storage ne sont pas bons, soit tu n'as pas précisé le type de session à utiliser dans les fichiers de configuration du framework.

Oki encore merci, et pour la session je vais voir ça.