Laravel Reindirizza indietro con () Messaggio


158

Sto cercando di reindirizzare alla pagina precedente con un messaggio in caso di errore irreversibile.

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

Nella vista cercando di accedere al messaggio con

Sessions::get('msg')

Ma nulla viene reso, sto facendo qualcosa di sbagliato qui?


1
correggi l'errore di battitura se aggiungi usedove necessario. A parte questo, dovrebbe funzionare.
Yevgeniy Afanasyev,

Risposte:


234

Provare

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

e dalla tua vista chiama questo

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

8
Funziona così bene. Ma perché non funziona return Redirect::back()->with('msg', 'The Message'); come ottenere "msg" qui?
Mudit Tuli,

Hai provato a vedere se il messaggio è lì? Session::has('msg')
giannis christofakis,

Sì, selezionato Session::has('msg')e "msg" non è presente.
Mudit Tuli,

2
@giannischristofakis Sembra proprio che sia così. Non ho idea di cosa stavo fumando quella fredda mattina nebbiosa di settembre.
StackOverflow del

7
Per 5.4 , withErrors('some error')- quindi deve essere una stringa anziché un array.
sentinella,

127

Laravel 5 e versioni successive

controllore

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

Lama:

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

7
Conversione da array a stringa :(
Yevgeniy Afanasyev,

Commento lasciato come modifica: se dà errore: conversione da array a stringa, quindi solo una piccola correzione nel controller return redirect()->back()->with('success', 'your message here');
Michael

@Michael Cosa vuoi dire se? Restituisce sicuramente un array!
Andrew Savetchuk,

@AndrewSavetchuk - non è il mio commento. Un altro utente SO aveva modificato la risposta quando avrebbe dovuto lasciare un commento qui o creare la propria risposta.
Michael,

@Michael dovremmo modificare la risposta nel modo giusto perché se esegui quel codice non funzionerà.
Andrew Savetchuk,

62

Un approccio alternativo sarebbe

controllore

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

Visualizza

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

22

In Laravel 5.4 per me ha funzionato:

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

Ciao. La risposta accettato è per l'uso in laravel 4 (vedere la domanda tag), i parametri per il withErrors()metodo della risposta è un array con due elementi: ['msg', 'The Message']. Vedi l'API per i parametri accettabili: laravel.com/api/4.2/Illuminate/Http/…
haakym,

Nella mia risposta, per l'uso in Laravel 5.4, i parametri per il withErrors()metodo sono un array con un elemento che è una key => valuecoppia, dove il valore è un array. 5.4 API: laravel.com/api/5.4/Illuminate/Http/…
haakym

13

Hai un errore (errore di ortografia):

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

Dovrebbe essere:

Session::get('msg')

Penso che ora dovrebbe funzionare, lo fa per me.


8

Basta impostare il messaggio flash e reindirizzare indietro dalla funzione del controller.

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

Quindi è possibile ottenere il messaggio nel file del pannello di visualizzazione.

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

Penso che {!! Session::get("msg", '') !!}dovrebbe essere abbastanza. get()controlla già se la chiave esiste e restituisce il valore predefinito in caso contrario.
Emile Bergeron,

8

In Laravel 5.5 :

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

Nella vista usando Blade:

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

2
$ errors-> has () non è riuscito ma $ errors-> any () funziona bene
robspin

6

In laravel 5.8 puoi fare quanto segue:

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

e nella lama:

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

4

Ho smesso di scriverlo per Laravel in favore del pacchetto Laracasts che gestisce tutto per te. È davvero facile da usare e mantiene pulito il tuo codice. C'è anche un laracast che copre come usarlo. Tutto ciò che devi fare:

Inserire il pacchetto tramite Composer.

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

Includi il fornitore di servizi in app / config / app.php.

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

Aggiungi un alias di facciata a questo stesso file in fondo:

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

Trascina l'HTML nella vista:

@include('flash::message') 

C'è un pulsante di chiusura sulla destra del messaggio. Questo si basa su jQuery, quindi assicurati che venga aggiunto prima del bootstrap.

modifiche opzionali:

Se non stai usando bootstrap o vuoi saltare l'inclusione del messaggio flash e scrivere tu stesso il codice:

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

Se desideri visualizzare l'HTML inserito @include('flash::message'), puoi trovarlo in vendor/laracasts/flash/src/views/message.blade.php.

Se è necessario modificare i parziali, procedere come segue:

php artisan view:publish laracasts/flash

Le due viste dei pacchetti ora si troveranno nella directory `app / views / pacchetti / laracasts / flash / '.


4

nel controller

Per esempio

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

nel file blade Il messaggio verrà archiviato nella sessione non nella variabile.

Per esempio

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

3

Per Laravel 5.5+

controller:

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

Lama:

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

2

Ho affrontato lo stesso problema e questo ha funzionato.

controllore

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

Visualizza

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

2

Per laravel 5.6. *

Mentre provo alcune delle risposte fornite in Laravel 5.6. *, È chiaro che ci sono stati alcuni miglioramenti che sto per pubblicare qui per rendere le cose facili per coloro che non sono riusciti a trovare una soluzione con il resto delle risposte.

PASSO 1:

Vai al tuo Controller File e aggiungilo prima della lezione:

use Illuminate\Support\Facades\Redirect;

PASSAGGIO 2: aggiungere questo dove si desidera restituire il reindirizzamento.

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

PASSAGGIO 3: vai al tuo file blade e modifica come segue

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

Quindi prova e grazie più tardi.

Questo dovrebbe funzionare con laravel 5.6. * E possibilmente 5.7. *


1

Per Laravel 3

Solo un avvertimento sulla risposta di @giannis christofakis; per chiunque usi Laravel 3 sostituirlo

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

con:

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

1

Laravel 5.6. *

controllore

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

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

Modello di lama

  @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

Ho ricevuto questo messaggio quando ho provato a reindirizzare come:

public function validateLogin(LoginRequest $request){
    //

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

Quando il modo giusto è:

public function validateLogin(LoginRequest $request){
    //

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

0

Laravel 5.8

controllore

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

Lama

  @if (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.