web-dev-qa-db-fra.com

Laravel Redirection avec Message ()

J'essaie de rediriger vers la page précédente avec un message quand 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 message avec

Sessions::get('msg')

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

122
Mudit Tuli

Essayer

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

et à l'intérieur de votre vue appelez ceci

@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
192

Laravel 5

contrôleur

 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
101
Ketan Akbari

Une approche alternative serait

Manette

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
56
Rick

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

return back()->withErrors(['field_name' => ['Your custom message here.']]);
15
haakym

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.

13
bumerang

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
7
Sergio

Il suffit de définir le message flash et de rediriger la fonction de votre contrôleur.

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

Et ensuite, vous pouvez obtenir le message dans le fichier de la lame de vue.

   {!! Session::has('msg') ? Session::get("msg") : '' !!}
7
Majbah Habib

J'ai arrêté d'écrire moi-même pour laravel en faveur de paquet Laracasts qui gère tout cela 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:

Tirez le paquet à travers 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 code HTML dans la vue:

@include('flash::message') 

Il y a un bouton de fermeture à droite du message. Cela dépend de jQuery, alors assurez-vous de l'ajouter avant votre bootstrap.

modifications optionnelles:

Si vous n'utilisez pas bootstrap ou ne voulez pas ignorer l'inclusion du message flash et écrivez 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 tiré par @include('flash::message'), vous pouvez le trouver dans vendor/laracasts/flash/src/views/message.blade.php.

Si vous avez besoin de modifier les partiels, faites:

php artisan view:publish laracasts/flash

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

4
DutGRIFF

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>
2
A. Mitani

Laravel 5.6. *

Contrôleur

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

Prendre plaisir

1
The Bumpaster

Pour Laravel 5.5 +

Contrôleur:

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
1
Andrew Savetchuk

Pour laravel 5.6. *

En essayant certaines des réponses fournies dans Laravel 5.6. *, Il est clair que certaines améliorations que je vais publier ici faciliteront la tâche de ceux qui ne trouvent pas de solution avec le reste du réponses.

Allez dans votre fichier de contrôleur et ajoutez ceci avant le cours:

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 de lame et modifiez-le comme suit

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

Puis testez et remerciez-moi plus tard.

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

1
Akintunde

dans le contrôleur

Par exemple

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

dans le fichier lame Le message sera stocké dans la session pas dans la variable.

Par exemple

@if(session('message'))
{{ session('message') }}
@endif
1
Hatim Hussein

Pour Laravel

Juste une tête sur @giannis christofakis répondre; pour toute personne utilisant Laravel 3, remplacez

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

avec:

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

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

public function validateLogin(LoginRequest $request){
    //

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

Quand la bonne voie est:

public function validateLogin(LoginRequest $request){
    //

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

Laravel 5.8

Contrôleur

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
0
wobsoriano