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?


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

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

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

22

Dalam Laravel 5.4 berikut ini bekerja untuk saya:

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

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.


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") : '' !!}

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

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

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 / '.


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

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

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>

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. *


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']);

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


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();

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.