Redirection Laravel avec () Message

158

J'essaye de rediriger vers la page précédente avec un message lorsqu'il y a une erreur fatale.

App::fatal(function($exception)
{
    return Redirect::back()->with('msg', 'The Message');
}

Dans la vue essayant d'accéder au msg avec

Sessions::get('msg')

Mais rien n'est rendu, est-ce que je fais quelque chose de mal ici?

Mudit Tuli
la source
1
corrigez la session typo s, et ajoutez usesi nécessaire. En dehors de cela - devrait fonctionner.
Yevgeniy Afanasyev

Réponses:

234

Essayer

return Redirect::back()->withErrors(['msg', 'The Message']);

et à l'intérieur de ta vue, appelle ça

@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
giannis christofakis
la source
8
Cela fonctionne, c'est cool. Mais pourquoi ne fonctionnera- return Redirect::back()->with('msg', 'The Message'); t-il pas comment obtenir le "msg" ici?
Mudit Tuli
Avez-vous essayé de voir si le message est là? Session::has('msg')
giannis christofakis
Oui vérifié Session::has('msg')et le 'msg' n'est pas là.
Mudit Tuli
2
@giannischristofakis Cela semble bien sûr. Je n'ai aucune idée de ce que je fumais ce matin froid et brumeux de septembre.
StackOverflowed
7
Pour 5.4 , withErrors('some error')- doit donc être une chaîne au lieu d'un tableau.
senty
127

Laravel 5 et versions ultérieures

Manette

 return redirect()->back()->with('success', 'your message,here');   

Lame:

@if (\Session::has('success'))
    <div class="alert alert-success">
        <ul>
            <li>{!! \Session::get('success') !!}</li>
        </ul>
    </div>
@endif
Ketan Akbari
la source
7
Conversion de tableau en chaîne :(
Yevgeniy Afanasyev
Commentaire laissé en tant que modification: s'il donne une erreur: conversion de tableau en chaîne, alors juste une petite correction dans le contrôleur return redirect()->back()->with('success', 'your message here');
Michael
@Michael Que voulez-vous dire si? Il renvoie définitivement un tableau!
Andrew Savetchuk
@AndrewSavetchuk - ce n'est pas mon commentaire. Un autre utilisateur de SO avait modifié la réponse alors qu'il aurait simplement dû laisser un commentaire ici ou créer sa propre réponse.
Michael
@Michael, nous devrions éditer la réponse de la bonne manière car si vous exécutez ce code, cela ne fonctionnera pas.
Andrew Savetchuk
62

Une approche alternative serait

Manette

use Session;
       
Session::flash('message', "Special message goes here");
return Redirect::back();

Vue

@if (Session::has('message'))
   <div class="alert alert-info">{{ Session::get('message') }}</div>
@endif
Meule
la source
22

Dans Laravel 5.4, les éléments suivants ont fonctionné pour moi:

return back()->withErrors(['field_name' => ['Your custom message here.']]);
haakym
la source
Salut. La réponse acceptée est pour une utilisation dans Laravel 4 (voir la balise question), les paramètres de la withErrors()méthode dans la réponse est un tableau avec deux éléments: ['msg', 'The Message']. Voir l'API pour les paramètres acceptables: laravel.com/api/4.2/Illuminate/Http/…
haakym
Dans ma réponse, pour une utilisation dans Laravel 5.4, les paramètres de la withErrors()méthode sont un tableau avec un élément qui est une key => valuepaire, où la valeur est un tableau. 5.4 API: laravel.com/api/5.4/Illuminate/Http/…
haakym
13

Vous avez une erreur (faute d'orthographe):

Sessions::get('msg')// an extra 's' on end

Devrait être:

Session::get('msg')

Je pense que maintenant ça devrait marcher, ça marche pour moi.

bumerang
la source
8

Il suffit de définir le message flash et de rediriger vers l'arrière de la fonction de votre contrôleur.

    session()->flash('msg', 'Successfully done the operation.');
    return redirect()->back();

Et puis vous pouvez obtenir le message dans le fichier de lame de vue.

   {!! Session::has('msg') ? Session::get("msg") : '' !!}
Majbah Habib
la source
Je pense que ça {!! Session::get("msg", '') !!}devrait suffire. get()vérifie déjà si la clé existe et renvoie la valeur par défaut dans le cas contraire.
Emile Bergeron
8

Dans Laravel 5.5 :

return back()->withErrors($arrayWithErrors);

Dans la vue utilisant Blade:

@if($errors->has())
    <ul>
    @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    </ul>
@endif
Sergio
la source
2
$ errors-> has () a échoué mais $ errors-> any () fonctionne bien
robspin
6

Dans laravel 5.8, vous pouvez effectuer les opérations suivantes:

return redirect()->back()->withErrors(['name' => 'The name is required']);

et en lame:

@error('name')
<p>{{ $message }}</p>
@enderror
justijn
la source
4

J'ai arrêté d'écrire ceci moi-même pour laravel en faveur du paquet Laracasts qui gère tout pour vous. Il est vraiment facile à utiliser et garde votre code propre. Il existe même un laracast qui explique comment l'utiliser. Tout ce que vous avez à faire:

Récupérez le package via Composer.

"require": {
  "laracasts/flash": "~1.0"
}

Incluez le fournisseur de services dans app / config / app.php.

'providers' => [
  'Laracasts\Flash\FlashServiceProvider'
];

Ajoutez un alias de façade à ce même fichier en bas:

'aliases' => [
  'Flash' => 'Laracasts\Flash\Flash'
];

Tirez le HTML dans la vue:

@include('flash::message') 

Il y a un bouton de fermeture à droite du message. Cela repose sur jQuery, alors assurez-vous qu'il est ajouté avant votre bootstrap.

modifications facultatives:

Si vous n'utilisez pas bootstrap ou si vous souhaitez ignorer l'inclusion du message flash et écrire le code vous-même:

@if (Session::has('flash_notification.message'))
  <div class="{{ Session::get('flash_notification.level') }}">
    {{ Session::get('flash_notification.message') }}
  </div>
@endif

Si vous souhaitez afficher le code HTML extrait par @include('flash::message'), vous pouvez le trouver dans vendor/laracasts/flash/src/views/message.blade.php.

Si vous devez modifier les partiels, procédez comme suit:

php artisan view:publish laracasts/flash

Les deux vues de package seront désormais situées dans le répertoire `app / views / packages / laracasts / flash / '.

DutGRIFF
la source
4

dans le contrôleur

Par exemple

return redirect('login')->with('message',$message);

dans le fichier lame Le message sera stocké en session et non en variable.

Par exemple

@if(session('message'))
{{ session('message') }}
@endif
Hatim Hussein
la source
3

Pour Laravel 5.5+

Manette:

return redirect()->back()->with('success', 'your message here');

Lame:

@if (Session::has('success'))
    <div class="alert alert-success">
        <ul>
            <li>{{ Session::get('success') }}</li>
        </ul>
    </div>
@endif
Andrew Savetchuk
la source
2

J'ai fait face au même problème et cela a fonctionné.

Manette

return Redirect::back()->withInput()->withErrors(array('user_name' => $message));

Vue

<div>{{{ $errors->first('user_name') }}}</div>
A. Mitani
la source
2

Pour laravel 5.6. *

En essayant certaines des réponses fournies dans Laravel 5.6. *, Il est clair qu'il y a eu des améliorations que je vais publier ici pour faciliter les choses pour ceux qui ne pourraient pas trouver de solution avec le reste des réponses.

ÉTAPE 1:

Accédez à votre fichier de contrôleur et ajoutez ceci avant la classe:

use Illuminate\Support\Facades\Redirect;

ÉTAPE 2: ajoutez ceci à l'endroit où vous souhaitez renvoyer la redirection.

 return Redirect()->back()->with(['message' => 'The Message']);

ÉTAPE 3: accédez à votre fichier lame et modifiez-le comme suit

@if (Session::has('message'))
<div class="alert alert-error>{{Session::get('message')}}</div>
 @endif

Alors testez et remerciez-moi plus tard.

Cela devrait fonctionner avec laravel 5.6. * Et éventuellement 5.7. *

Akintunde
la source
1

Pour Laravel 3

Juste un avertissement sur la réponse @giannis christofakis; pour tous ceux qui utilisent Laravel 3 remplacer

return Redirect::back()->withErrors(['msg', 'The Message']);

avec:

return Redirect::back()->with_errors(['msg', 'The Message']);
Dev1997
la source
1

Laravel 5.6. *

Manette

if(true) {
   $msg = [
        'message' => 'Some Message!',
       ];

   return redirect()->route('home')->with($msg);
} else {
  $msg = [
       'error' => 'Some error!',
  ];
  return redirect()->route('welcome')->with($msg);
}

Modèle de lame

  @if (Session::has('message'))
       <div class="alert alert-success" role="alert">
           {{Session::get('message')}}
       </div>
  @elseif (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif

Enyoj

Le Bumpaster
la source
0

J'ai reçu ce message lorsque j'ai essayé de rediriger en tant que:

public function validateLogin(LoginRequest $request){
    //

    return redirect()->route('sesion.iniciar')
            ->withErrors($request)
            ->withInput();

Quand la bonne façon est:

public function validateLogin(LoginRequest $request){
    //

    return redirect()->route('sesion.iniciar')
            ->withErrors($request->messages())
            ->withInput();
manix
la source
0

Laravel 5.8

Manette

return back()->with('error', 'Incorrect username or password.');

Lame

  @if (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif
wobsoriano
la source