Laravelリダイレクトwith()メッセージ


158

致命的なエラーが発生したときに、メッセージを表示して前のページにリダイレクトしようとしています。

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

でメッセージにアクセスしようとしているビューで

Sessions::get('msg')

しかし、何もレンダリングされていません。ここで何か問題がありますか?


1
typo Sessionを修正し、必要に応じてs追加useします。それとは別に-動作するはずです。
Yevgeniy Afanasyev 2018年

回答:


234

試す

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

そしてあなたの見解の中でこれを呼んでください

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

8
これはうまくいきます。しかし、なぜreturn Redirect::back()->with('msg', 'The Message'); ここで「メッセージ」を取得する方法が機能しないの ですか?
Mudit Tuli 2013

メッセージがあるかどうか確認してみましたか?Session::has('msg')
giannis christofakis 2013年

はい、チェックSession::has('msg')しました。「msg」はありません。
Mudit Tuli 2013

2
@giannischristofakis確かにそうです。9月のあの冷たい霧の朝、何を吸っていたのか私にはわかりません。
StackOverflowed 2015

7
5.4の場合withErrors('some error')-は配列ではなく文字列である必要があります。
2017年

127

Laravel 5以降

コントローラ

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

刃:

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

7
配列から文字列への変換:(
Yevgeniy Afanasyev

編集として残されたコメント:エラーが発生した場合:配列から文字列への変換、コントローラーの 小さな修正return redirect()->back()->with('success', 'your message here');
Michael

@マイケルはどういう意味ですか?それは間違いなく配列を返します!
Andrew Savetchuk

@AndrewSavetchuk-私のコメントではありません。別のSOユーザーが、ここにコメントを残したり、独自の回答を作成したりする必要があるときに、回答を編集しました。
マイケル、

@Michaelコードを実行しても機能しないため、正しい方法で回答を編集する必要があります。
Andrew Savetchuk

62

代替アプローチは

コントローラ

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

見る

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

22

Laravel 5.4では、次のことがうまくいきました。

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

こんにちは。受け入れられた回答は、Laravel 4(質問タグを参照)で使用するためのwithErrors()ものです。回答のメソッドのパラメーターは、2つの要素を持つ配列です['msg', 'The Message']。:許容可能なパラメータのためのAPIを参照してくださいlaravel.com/api/4.2/Illuminate/Http/...
haakym

私の回答では、Laravel 5.4で使用するために、withErrors()メソッドのパラメーターは、1つの要素がkey => valueペアである配列で、値は配列です。5.4 API:laravel.com/api/5.4/Illuminate/Http/...
haakym

13

エラーがあります(スペルミス):

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

する必要があります:

Session::get('msg')

私は今、うまくいくと思います、それは私にとってはうまくいきます。


8

フラッシュメッセージを設定し、コントローラー機能から戻るようにリダイレクトするだけです。

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

そして、メッセージをビューブレードファイルで取得できます。

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

{!! Session::get("msg", '') !!}十分だと思います。get()は、キーが存在するかどうかをすでに確認し、存在しない場合はデフォルト値を返します。
エミールベルジェロン2017年

8

Laravel 5.5の場合

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

ブレードを使用するビューで:

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

2
$ errors-> has()は失敗しましたが、$ errors-> any()はうまく機能します
robspin

6

laravel 5.8では、次のことができます。

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

そしてブレードで:

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

4

私はあなたのためにそれをすべて処理するLaracastsパッケージを支持して、これをlaravelのために自分で書くのをやめました。それは本当に使いやすく、コードをクリーンに保ちます。それを使用する方法をカバーするララキャストもあります。あなたがしなければならないすべて:

Composerを通じてパッケージを取り込みます。

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

app / config / app.php内にサービスプロバイダーを含めます。

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

下の同じファイルにファサードエイリアスを追加します。

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

HTMLをビューにプルします。

@include('flash::message') 

メッセージの右側に閉じるボタンがあります。これはjQueryに依存しているので、ブートストラップの前に追加されていることを確認してください。

オプションの変更:

ブートストラップを使用していない場合、またはフラッシュメッセージのインクルードをスキップして自分でコードを記述したい場合:

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

によって取り込まれたHTMLを表示したい@include('flash::message')場合は、で見つけることができますvendor/laracasts/flash/src/views/message.blade.php

パーシャルを変更する必要がある場合は、次のようにします。

php artisan view:publish laracasts/flash

2つのパッケージビューは、 `app / views / packages / laracasts / flash / 'ディレクトリに配置されます。


4

コントローラ内

例えば

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

ブレードファイル内 メッセージは変数ではなくセッションに格納されます。

例えば

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

3

Laravel 5.5以降の場合

コントローラ:

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

刃:

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

2

私は同じ問題に直面し、これはうまくいきました。

コントローラ

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

見る

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

2

laravel 5.6。*の場合

Laravel 5.6。*で提供された回答の一部を試してみましたが、他の回答で解決策を見つけられなかった人が簡単にできるように、ここに投稿するいくつかの改善点があることは明らかです。

ステップ1:

コントローラーファイルに移動し、クラスの前にこれを追加します。

use Illuminate\Support\Facades\Redirect;

ステップ2:リダイレクトを返す場所にこれを追加します。

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

ステップ3:ブレードファイルに移動し、次のように編集します

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

その後、テストして後で感謝します。

これは、laravel 5.6。*およびおそらく5.7。*で動作するはずです。


1

Laravel 3の場合

@giannis christofakisの回答を確認します。Laravel 3を使用している人のために

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

と:

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

1

Laravel 5.6。*

コントローラ

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

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

ブレードテンプレート

  @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

エンヨジ


0

次のようにリダイレクトしようとしたときに、このメッセージが表示されました。

public function validateLogin(LoginRequest $request){
    //

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

正しい方法は:

public function validateLogin(LoginRequest $request){
    //

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

0

Laravel 5.8

コントローラ

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

  @if (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.