Laravel () Mesajıyla Yeniden Yönlendir


158

Önemli bir hata olduğunda önceki sayfaya bir mesajla yönlendirmeye çalışıyorum.

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

Görünümde msg ile erişmeye çalışıyor

Sessions::get('msg')

Ama hiçbir şey işlenmiyor, burada yanlış bir şey mi yapıyorum?


1
Yazım hatası oturumunu düzeltin sve usegerektiğinde ekleyin . Bunun dışında - çalışmalı.
Yevgeniy Afanasyev

Yanıtlar:


234

Deneyin

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

ve görüşünüzün içinde buna

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

8
Bu işe yarıyor, ne kadar havalı. Ama neden return Redirect::back()->with('msg', 'The Message'); "msg" burada almak için bu çalışma alışkanlık ?
Mudit Tuli

Mesajın orada olup olmadığını görmeye çalıştınız mı? Session::has('msg')
giannis christofakis

Evet işaretlendi Session::has('msg')ve 'msg' orada değil.
Mudit Tuli

2
@giannischristofakis Kesinlikle öyle görünüyor. Eylül ayında o soğuk sisli sabahı ne içtiğimi bilmiyorum.
StackOverflowed

7
5.4 için , withErrors('some error')- yani dizi yerine bir dize olması gerekir.
nöbet

127

Laravel 5 ve üstü

kontrolör

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

Bıçak ağzı:

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

7
Dizi dizeden dönüştürme :(
Yevgeniy Afanasyev

Düzenleme olarak yorum bıraktı: Hata veriyorsa: Dizge Dizisine Dönüştürme, denetleyicideki küçük düzeltmereturn redirect()->back()->with('success', 'your message here');
Michael

@Michael Ne demek istiyorsun? Kesinlikle bir dizi döndürür!
Andrew Savetchuk

@AndrewSavetchuk - bu benim yorumum değil. Başka bir SO kullanıcısı, burada bir yorum bırakması veya kendi cevabını oluşturması gerektiğinde cevabı düzenledi.
Michael

@Michael cevabı doğru şekilde düzenlemeliyiz çünkü bu kodu çalıştırırsanız çalışmaz.
Andrew Savetchuk

62

Alternatif yaklaşım

kontrolör

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

Görünüm

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

22

Laravel 5.4'te aşağıdakiler benim için çalıştı:

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

Selam. Kabul cevap (soru etiketi bakınız) için parametreleri laravel 4'te kullanım içindir withErrors()yanıtında yöntemle iki elemanlı bir dizidir: ['msg', 'The Message']. Kabul
haakym

Cevabım, Laravel 5.4'te kullanım için, withErrors()yöntemin parametreleri, değerin bir dizi olduğu bir öğe olan bir öğe içeren key => valuebir dizidir. 5.4 API: laravel.com/api/5.4/Illuminate/Http/…
haakym

13

Bir hatanız var (yazım hatası):

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

Olmalı:

Session::get('msg')

Sanırım şimdi işe yaramalı, benim için öyle.


8

Sadece flaş mesajı ayarlayın ve denetleyici işlevinizden geriye yönlendirin.

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

Ve sonra görünümü görünüm dosyası içinde alabilirsiniz.

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

Bence {!! Session::get("msg", '') !!}yeterli olmalı. anahtarın var get()olup olmadığını zaten kontrol eder ve aksi takdirde varsayılan değeri döndürür.
Emile Bergeron

8

Laravel 5.5'te :

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

Blade kullanarak görünümde:

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

2
$ error-> has () başarısız oldu ama $ error-> any () iyi çalışıyor
robspin

6

Laravel 5.8'de aşağıdakileri yapabilirsiniz:

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

ve bıçakta:

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

4

Bunu sizin için her şeyi halleden Laracasts paketinin lehine laravel için yazmayı bıraktım . Kullanımı gerçekten kolaydır ve kodunuzu temiz tutar. Bir laracast bile varNasıl kullanılacağını kapsayan var. Yapman gereken tek sey:

Paketi Composer aracılığıyla çekin.

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

Servis sağlayıcıyı app / config / app.php dosyasına ekleyin.

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

Alttaki aynı dosyaya bir cephe takma adı ekleyin:

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

HTML'yi görünüme çekin:

@include('flash::message') 

Mesajın sağında bir kapatma düğmesi bulunur. Bu jQuery'ye dayanmaktadır, bu nedenle önyüklemenizden önce eklendiğinden emin olun.

isteğe bağlı değişiklikler:

Önyükleme kullanmıyorsanız veya flash mesajın eklenmesini atlamak ve kodu kendiniz yazmak istiyorsanız:

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

Çektiği HTML'yi görüntülemek @include('flash::message')isterseniz,vendor/laracasts/flash/src/views/message.blade.php .

Kısmi değiştirmeniz gerekiyorsa:

php artisan view:publish laracasts/flash

İki paket görünümü artık "app / views / Packages / laracasts / flash /" dizininde bulunacaktır.


4

denetleyicide

Örneğin

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

bıçak dosyasında Mesaj oturumda değişken olarak saklanmayacaktır.

Örneğin

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

3

Laravel 5.5+ için

Denetleyici:

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

Bıçak ağzı:

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

2

Aynı sorunla karşılaştım ve bu işe yaradı.

kontrolör

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

Görünüm

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

2

Laravel 5.6 için. *

Laravel 5.6. * 'Da verilen cevaplardan bazılarını denerken, cevapların geri kalanıyla bir çözüm bulamayanlar için işleri kolaylaştırmak için burada yayınlayacağım bazı iyileştirmeler olduğu açıktır.

AŞAMA 1:

Denetleyici Dosyanıza gidin ve bunu dersten önce ekleyin:

use Illuminate\Support\Facades\Redirect;

ADIM 2: Yönlendirmeyi geri vermek istediğiniz yere ekleyin.

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

ADIM 3: Blade dosyanıza gidin ve aşağıdaki gibi düzenleyin

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

Sonra test edin ve daha sonra bana teşekkür edin.

Bu laravel 5.6. * Ve muhtemelen 5.7. * İle çalışmalıdır.


1

Laravel 3 için

@Giannis christofakis cevabına sadece bir kafa; Laravel 3 kullanan herkes için

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

ile:

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

1

Laravel 5.6. *

kontrolör

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

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

Bıçak Şablonu

  @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

Bu iletiyi şu şekilde yönlendirmeye çalıştığımda aldım:

public function validateLogin(LoginRequest $request){
    //

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

Doğru yol olduğunda:

public function validateLogin(LoginRequest $request){
    //

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

0

Laravel 5.8

kontrolör

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

Bıçak ağzı

  @if (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.