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, die Nachricht mit aufzurufen
Sessions::get('msg')
Aber nichts wird gerendert, mache ich hier etwas falsch?
Versuchen
return Redirect::back()->withErrors(['msg', 'The Message']);
und nennen Sie dies in Ihrer Sicht
@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
Laravel 5
Controller
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
Ein alternativer Ansatz wäre
Regler
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
In Laravel 5.4 hat für mich folgendes funktioniert:
return back()->withErrors(['field_name' => ['Your custom message here.']]);
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.
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
Stellen Sie einfach die Flash-Nachricht ein und leiten Sie 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 abrufen.
{!! Session::has('msg') ? Session::get("msg") : '' !!}
Ich habe aufgehört, dies für laravel zugunsten des Laracasts-Pakets zu schreiben, das alles für Sie erledigt. Es ist wirklich einfach zu bedienen und hält Ihren Code sauber Sogar ein Laracast , das beschreibt, wie man es benutzt.
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 also sicher, dass es vor Ihrem Bootstrap hinzugefügt wird.
optionale Änderungen:
Wenn Sie bootstrap nicht verwenden oder das Include 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 von @include('flash::message')
eingegebenen HTML-Code anzeigen möchten, 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 nun im Verzeichnis `app/views/packages/laracasts/flash/'.
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>
Laravel 5.6. *
Controller
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
Genießen
Für Laravel 5.5 +
Controller:
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
Während ich einige der in Laravel 5.6. * Bereitgestellten Antworten ausprobiere, ist es klar, dass es einige Verbesserungen gibt, die ich hier posten werde, um es denjenigen zu erleichtern, die mit dem keine Lösung finden konnten Rest der Antworten.
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 funktionieren mit laravel 5.6. * Und möglicherweise 5.7. *
im Controller
Zum Beispiel
return redirect('login')->with('message',$message);
in Blade-Datei Die Nachricht wird in Sitzung nicht in Variable gespeichert.
Zum Beispiel
@if(session('message'))
{{ session('message') }}
@endif
Für Laravel
Nur eine kurze Antwort von @giannis christofakis; für jeden, der Laravel 3 ersetzt
return Redirect::back()->withErrors(['msg', 'The Message']);
mit:
return Redirect::back()->with_errors(['msg', 'The Message']);
Ich habe diese Nachricht erhalten, als ich versucht habe 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();
Laravel 5.8
Controller
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