Laravel Redirect Back dengan () Pesan

158

Saya mencoba mengalihkan ke halaman sebelumnya dengan pesan ketika ada kesalahan fatal.

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

Pada tampilan mencoba mengakses pesan dengan

Sessions::get('msg')

Tapi tidak ada yang diberikan, apakah saya melakukan sesuatu yang salah di sini?

Mudit Tuli
sumber
1
perbaiki Sesi salah ketik s, dan tambahkan usejika perlu. Selain itu - harus bekerja.
Yevgeniy Afanasyev

Jawaban:

234

Mencoba

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

dan di dalam tampilan Anda panggil ini

@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
Giannis christofakis
sumber
8
Ini berfungsi, keren sekali. Tapi mengapa ini tidak berhasil return Redirect::back()->with('msg', 'The Message'); bagaimana mendapatkan "msg" di sini?
Mudit Tuli
Sudahkah Anda mencoba melihat apakah pesannya ada di sana? Session::has('msg')
giannis christofakis
Ya dicentang Session::has('msg')dan 'msg' tidak ada di sana.
Mudit Tuli
2
@giannischristofakis Sepertinya memang seperti itu. Saya tidak tahu apa yang saya merokok pagi itu berkabut dingin pada bulan September.
StackOverflowed
7
Untuk 5.4 , withErrors('some error')- jadi harus berupa string, bukan array.
Senty
127

Laravel 5 dan yang lebih baru

Pengendali

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

Pedang:

@if (\Session::has('success'))
    <div class="alert alert-success">
        <ul>
            <li>{!! \Session::get('success') !!}</li>
        </ul>
    </div>
@endif
Ketan Akbari
sumber
7
Array ke konversi string :(
Yevgeniy Afanasyev
Komentar dibiarkan sebagai edit: Jika itu memberikan Kesalahan: Array ke Konversi String, maka hanya perbaikan kecil di controller return redirect()->back()->with('success', 'your message here');
Michael
@Michael Apa maksudmu jika? Ini pasti mengembalikan array!
Andrew Savetchuk
@AndrewSavetchuk - itu bukan komentar saya. Pengguna SO lainnya telah mengedit jawaban ketika ia seharusnya meninggalkan komentar di sini atau membuat jawabannya sendiri.
Michael
@Michael kita harus mengedit jawaban dengan cara yang benar karena jika Anda menjalankan kode itu tidak akan berfungsi.
Andrew Savetchuk
62

Pendekatan alternatif akan menjadi

Pengendali

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

Melihat

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

Dalam Laravel 5.4 berikut ini bekerja untuk saya:

return back()->withErrors(['field_name' => ['Your custom message here.']]);
haakym
sumber
Hai. Jawaban yang diterima adalah untuk digunakan dalam LARAVEL 4 (lihat tag pertanyaan), parameter untuk withErrors()metode dalam jawabannya adalah sebuah array dengan dua elemen: ['msg', 'The Message']. Lihat api untuk parameter yang dapat diterima: laravel.com/api/4.2/Illuminate/Http/…
haakym
Dalam jawaban saya, untuk digunakan dalam Laravel 5.4, parameter untuk withErrors()metode ini adalah array dengan satu elemen yang merupakan key => valuepasangan, di mana nilainya adalah array. 5.4 API: laravel.com/api/5.4/Illuminate/Http/…
haakym
13

Anda memiliki kesalahan (salah mengeja):

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

Seharusnya:

Session::get('msg')

Saya pikir, sekarang itu harus bekerja, itu untuk saya.

bumerang
sumber
8

Cukup atur pesan flash dan arahkan ke kembali dari fungsi pengontrol Anda.

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

Dan kemudian Anda bisa mendapatkan pesan di file blade tampilan.

   {!! Session::has('msg') ? Session::get("msg") : '' !!}
Majbah Habib
sumber
Saya pikir {!! Session::get("msg", '') !!}sudah cukup. get()sudah memeriksa apakah kunci ada dan mengembalikan nilai default sebaliknya.
Emile Bergeron
8

Dalam Laravel 5.5 :

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

Dalam tampilan menggunakan Blade:

@if($errors->has())
    <ul>
    @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    </ul>
@endif
Sergio
sumber
2
$ errors-> has () gagal tetapi $ errors-> any () berfungsi dengan baik
robspin
6

Di laravel 5.8 Anda dapat melakukan hal berikut:

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

dan di blade:

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

Saya berhenti menulis sendiri untuk laravel yang mendukung paket Laracasts yang menangani semuanya untuk Anda. Ini sangat mudah digunakan dan menjaga kode Anda tetap bersih. Bahkan ada laracast yang mencakup cara menggunakannya. Yang harus Anda lakukan:

Tarik paket melalui Komposer.

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

Masukkan penyedia layanan di dalam app / config / app.php.

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

Tambahkan alias fasad ke file yang sama di bagian bawah:

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

Tarik HTML ke tampilan:

@include('flash::message') 

Ada tombol tutup di sebelah kanan pesan. Ini bergantung pada jQuery jadi pastikan itu ditambahkan sebelum bootstrap Anda.

perubahan opsional:

Jika Anda tidak menggunakan bootstrap atau ingin melewatkan sertakan pesan kilat dan tulis sendiri kodenya:

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

Jika Anda ingin melihat HTML yang ditarik masuk @include('flash::message'), Anda dapat menemukannyavendor/laracasts/flash/src/views/message.blade.php .

Jika Anda perlu memodifikasi parsial lakukan:

php artisan view:publish laracasts/flash

Dua tampilan paket sekarang akan berada di direktori `app / views / packages / laracasts / flash / '.

DUTGRIFF
sumber
4

di pengontrol

Sebagai contoh

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

dalam file blade Pesan akan disimpan dalam sesi bukan dalam variabel.

Sebagai contoh

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

Untuk Laravel 5.5+

Pengendali:

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

Pedang:

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

Saya menghadapi masalah yang sama dan ini berhasil.

Pengendali

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

Melihat

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

Untuk laravel 5.6. *

Saat mencoba beberapa jawaban yang disediakan di Laravel 5.6. *, Sudah jelas ada beberapa perbaikan yang akan saya posting di sini untuk mempermudah hal-hal yang tidak dapat menemukan solusi dengan sisa jawaban.

LANGKAH 1:

Buka File Controller Anda dan Tambahkan ini sebelum kelas:

use Illuminate\Support\Facades\Redirect;

LANGKAH 2: Tambahkan ini di mana Anda ingin mengembalikan arahan ulang.

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

LANGKAH 3: Buka file pisau Anda dan edit sebagai berikut

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

Kemudian tes dan terima kasih nanti.

Ini harus bekerja dengan laravel 5.6. * Dan mungkin 5.7. *

Akintunde
sumber
1

Untuk Laravel 3

Hanya kepala di jawaban @ giannis christofakis; untuk siapa pun yang menggunakan Laravel 3 ganti

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

dengan:

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

Laravel 5.6. *

Pengendali

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

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

Templat Blade

  @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

Bumpaster
sumber
0

Saya mendapat pesan ini ketika saya mencoba mengalihkan sebagai:

public function validateLogin(LoginRequest $request){
    //

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

Saat yang benar adalah:

public function validateLogin(LoginRequest $request){
    //

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

Laravel 5.8

Pengendali

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

Pedang

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