Laravel Redirect Zurück mit () Nachricht


158

Ich versuche, mit einer Meldung zur vorherigen Seite umzuleiten, wenn ein schwerwiegender Fehler auftritt.

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

In der Ansicht wird versucht, auf die Nachricht mit zuzugreifen

Sessions::get('msg')

Aber nichts wird gerendert, mache ich hier etwas falsch?


1
Beheben Sie Tippfehler sund fügen Sie sie usebei Bedarf hinzu. Abgesehen davon - sollte funktionieren.
Jewgenij Afanasjew

Antworten:


234

Versuchen

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

und in Ihrer Sicht nennen Sie dies

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

8
Das funktioniert, wie cool. Aber warum funktioniert return Redirect::back()->with('msg', 'The Message'); das nicht, um die "Nachricht" hier zu bekommen?
Mudit Tuli

Haben Sie versucht zu sehen, ob die Nachricht da ist? Session::has('msg')
Giannis Christofakis

Ja überprüft Session::has('msg')und die 'Nachricht' ist nicht da.
Mudit Tuli

2
@ Giannischristofakis Es scheint sicher so. Ich habe keine Ahnung, was ich an diesem kalten, nebligen Morgen im September geraucht habe.
StackOverflowed

7
Für 5.4 muss withErrors('some error')- also eine Zeichenfolge anstelle eines Arrays sein.
Senty

127

Laravel 5 und später

Regler

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

Klinge:

@if (\Session::has('success'))
    <div class="alert alert-success">
        <ul>
            <li>{!! \Session::get('success') !!}</li>
        </ul>
    </div>
@endif

7
Array in String-Konvertierung :(
Yevgeniy Afanasyev

Kommentar als Bearbeitung übrig: Wenn es Fehler gibt: Array zu String Konvertierung, dann nur kleine Korrektur in Controller return redirect()->back()->with('success', 'your message here');
Michael

@ Michael Was meinst du wenn? Es gibt definitiv ein Array zurück!
Andrew Savetchuk

@ AndrewSavetchuk - das ist nicht mein Kommentar. Ein anderer SO-Benutzer hatte die Antwort bearbeitet, wenn er hier nur einen Kommentar hätte hinterlassen oder seine eigene Antwort erstellen sollen.
Michael

@Michael, wir sollten die Antwort richtig bearbeiten, denn wenn Sie diesen Code ausführen, funktioniert er nicht.
Andrew Savetchuk

62

Ein alternativer Ansatz wäre

Regler

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

Aussicht

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

22

In Laravel 5.4 hat Folgendes für mich funktioniert:

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

Hallo. Die akzeptierte Antwort ist für die Verwendung in Laravel 4 vorgesehen (siehe Frage-Tag). Die Parameter für die withErrors()Methode in der Antwort sind ein Array mit zwei Elementen : ['msg', 'The Message']. Siehe die API für akzeptable Parameter: laravel.com/api/4.2/Illuminate/Http/…
haakym

In meiner Antwort sind die Parameter für die withErrors()Methode zur Verwendung in Laravel 5.4 ein Array mit einem Element, das ein key => valuePaar ist, wobei der Wert ein Array ist. 5.4 API: laravel.com/api/5.4/Illuminate/Http/…
haakym

13

Sie haben einen Fehler (Rechtschreibfehler):

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

Sollte sein:

Session::get('msg')

Ich denke, jetzt sollte es funktionieren, das tut es für mich.


8

Stellen Sie einfach die Flash-Nachricht ein und leiten Sie von Ihrer Controller-Funktion zurück.

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

Und dann können Sie die Nachricht in der View Blade-Datei erhalten.

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

Ich denke {!! Session::get("msg", '') !!}sollte reichen. get()prüft bereits, ob der Schlüssel vorhanden ist und gibt ansonsten den Standardwert zurück.
Emile Bergeron

8

In Laravel 5.5 :

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

In der Ansicht mit Blade:

@if($errors->has())
    <ul>
    @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    </ul>
@endif

2
$ Errors-> has () war fehlgeschlagen, aber $ error-> any () funktioniert gut
Robspin

6

In Laravel 5.8 können Sie Folgendes tun:

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

und in der Klinge:

@error('name')
<p>{{ $message }}</p>
@enderror

4

Ich habe aufgehört, dies selbst für Laravel zu schreiben, und zwar zugunsten des Laracasts-Pakets , das alles für Sie erledigt. Es ist sehr einfach zu bedienen und hält Ihren Code sauber. Es gibt sogar einen Laracast , der die Verwendung beschreibt. Alles, was Sie zu tun haben:

Ziehen Sie das Paket durch Composer.

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

Fügen Sie den Dienstanbieter in app / config / app.php ein.

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

Fügen Sie dieser Datei unten einen Fassadenalias hinzu:

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

Ziehen Sie den HTML-Code in die Ansicht:

@include('flash::message') 

Rechts neben der Nachricht befindet sich eine Schaltfläche zum Schließen. Dies hängt von jQuery ab. Stellen Sie daher sicher, dass es vor Ihrem Bootstrap hinzugefügt wird.

optionale Änderungen:

Wenn Sie kein Bootstrap verwenden oder das Einschließen der Flash-Nachricht überspringen und den Code selbst schreiben möchten:

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

Wenn Sie den eingezogenen HTML-Code anzeigen möchten @include('flash::message'), finden Sie ihn in vendor/laracasts/flash/src/views/message.blade.php.

Wenn Sie die Partials ändern müssen, gehen Sie wie folgt vor:

php artisan view:publish laracasts/flash

Die beiden Paketansichten befinden sich jetzt im Verzeichnis "app / views / packages / laracasts / flash /".


4

in der Steuerung

Beispielsweise

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

in Blade-Datei Die Nachricht wird in einer Sitzung nicht in einer Variablen gespeichert.

Beispielsweise

@if(session('message'))
{{ session('message') }}
@endif

3

Für Laravel 5.5+

Regler:

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

Klinge:

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

2

Ich hatte das gleiche Problem und das hat funktioniert.

Regler

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

Aussicht

<div>{{{ $errors->first('user_name') }}}</div>

2

Für Laravel 5.6. *

Während ich einige der in Laravel 5.6. * Bereitgestellten Antworten ausprobiere, ist klar, dass es einige Verbesserungen gibt, die ich hier veröffentlichen werde, um es denjenigen zu erleichtern, die mit den restlichen Antworten keine Lösung finden konnten.

SCHRITT 1:

Gehen Sie zu Ihrer Controller-Datei und fügen Sie diese vor der Klasse hinzu:

use Illuminate\Support\Facades\Redirect;

SCHRITT 2: Fügen Sie dies hinzu, wo Sie die Umleitung zurückgeben möchten.

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

SCHRITT 3: Gehen Sie zu Ihrer Blade-Datei und bearbeiten Sie sie wie folgt

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

Dann teste und danke mir später.

Dies sollte mit Laravel 5.6. * Und möglicherweise 5.7. * Funktionieren


1

Für Laravel 3

Nur ein Hinweis auf die Antwort von @giannis christofakis; für alle, die Laravel 3 verwenden, ersetzen

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

mit:

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

1

Laravel 5.6. *

Regler

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

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

Klingenvorlage

  @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


0

Ich habe diese Nachricht erhalten, als ich versuchte, umzuleiten als:

public function validateLogin(LoginRequest $request){
    //

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

Wenn der richtige Weg ist:

public function validateLogin(LoginRequest $request){
    //

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

0

Laravel 5.8

Regler

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

Klinge

  @if (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.