web-dev-qa-db-ja.com

Laravel 5.2成功メッセージでリダイレクト

私はlaravelのホームページに成功メッセージを返そうとしています。

return redirect()->back()->withSuccess('IT WORKS!');

何らかの理由で、このコードを実行した後、変数$ successは値を取得しません。

成功メッセージを表示するために使用しているコード:

@if (!empty($success))
    <h1>{{$success}}</h1>
@endif

次のように、routes.phpのWebミドルウェアグループにホームページとニュースレターページを追加しました。

Route::group(['middleware' => 'web'], function () {
    Route::auth();

    Route::get('/', function () {
        return view('home');
    });

    Route::post('/newsletter/subscribe','NewsletterController@subscribe');
});

なぜこれが機能しないように見えるのか誰にも分かりますか?

34
Stefan

routes.phpからwebミドルウェアを削除する必要があります。 webミドルウェアを手動で追加すると、 Laravel 5.2.27以降のセッションおよびリクエスト関連の問題 が発生します。

それでも解決しない場合(まだ、ミドルウェアなしでroutes.phpを保持する)、少し異なるアプローチを試すことができます:

return redirect()->back()->with('message', 'IT WORKS!');

メッセージが存在する場合の表示:

@if(session()->has('message'))
    <div class="alert alert-success">
        {{ session()->get('message') }}
    </div>
@endif
86
Alexey Mezenin

これを使用できます:

return redirect()->back()->withSuccess('IT WORKS!');

ビューでこれを使用します:

@if(session('success'))
    <h1>{{session('success')}}</h1>
@endif
18

コントローラ:

return redirect()->route('subscriptions.index')->withSuccess(['Success Message here!']);

@if (session()->has('success'))
    <div class="alert alert-success">
        @if(is_array(session()->get('success')))
        <ul>
            @foreach (session()->get('success') as $message)
                <li>{{ $message }}</li>
            @endforeach
        </ul>
        @else
            {{ session()->get('success') }}
        @endif
    </div>
@endif

このパーツはいつでも個別のブレードファイルとして保存し、簡単に含めることができます。前例:

<div class="row">
        <div class="col-md-6">
            @include('admin.system.success')
            <div class="box box-widget">
4
Alex Sholom

これを行う1つの方法は、次のようにセッションでメッセージを送信することです。

コントローラー:

return redirect()->back()->with('success', 'IT WORKS!');

ビュー

@if (session()->has('success'))
    <h1>{{ session('success') }}</h1>
@endif

そして、それを行う別の方法は、単にセッションを作成し、テキストを直接ビューに入れることです:

コントローラー

return redirect()->back()->with('success', true);

ビュー

@if (session()->has('success'))
    <h1>IT WORKS!</h1>
@endif

ここで完全なドキュメントを確認できます: リダイレクトされたセッションデータを使用したリダイレクト

よろしくお願いします。

上記はすべて正しいですが、この直線的な1ライナーを試してください。

{{session()->has('message') ? session()->get('message') : ''}}

3

コントローラー内

return redirect()->route('company')->with('update', 'Content has been updated successfully!');

ビュー内

@if (session('update'))
  <div class="alert alert-success alert-dismissable custom-success-box" style="margin: 15px;">
     <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
     <strong> {{ session('update') }} </strong>
  </div>
@endif
1

laravel MessageBagを使用して、既存のメッセージに独自のメッセージを追加できます。

MessageBagを使用するには、次を使用する必要があります。

use Illuminate\Support\MessageBag;

コントローラー内:

MessageBag $message_bag

$message_bag->add('message', trans('auth.confirmation-success'));

return redirect('login')->withSuccess($message_bag);

それが何かを助けることを願っています。

  • アディ
1