web-dev-qa-db-ja.com

Laravel()メッセージでリダイレクトする

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

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

ビューでmsgにアクセスしようとしています

Sessions::get('msg')

しかし、何もレンダリングされていません、私はここで何か悪いことをしていますか?

113
Mudit Tuli

やってみる

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

そしてあなたの視野の中でこれを呼び出します

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

レベル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

Error:Array to String Conversionというエラーが表示される場合は、コントローラをわずかに修正する

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

代替アプローチは

コントローラ

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

見る

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

Laravel 5.4では、以下がうまくいきました。

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

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

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

する必要があります:

Session::get('msg')

私は、今はうまくいくはずだと思います。

13
bumerang

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

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

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

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

Laravel 5.5

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

Bladeを使ったビューでは:

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

私はあなた自身のためにそれをすべて扱う Laracastsパッケージ に賛成してlalavelのために私自身これを書くのをやめました。それは本当に使いやすく、あなたのコードをきれいに保ちます。使い方を説明した laracast さえあります。あなたがしなければならないすべて:

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

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

パーシャルを修正する必要があるならば:

php artisan view:publish laracasts/flash

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

4
DutGRIFF

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

楽しい

1
The Bumpaster

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

コントローラ

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

見る

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

For 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
1

コントローラ内

例えば

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

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

例えば

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

Laravel 3の場合

@ giannis christofakisという回答を読んでください。 Laravel 3を使用している人のためのもの3

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

と:

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

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

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
manix

レベル5.6の場合*

Laravel 5.6。*で提供されている答えのいくつかを試している間、他の方法で解決策を見つけることができなかった人々のために物事を簡単にするためにここに投稿するつもりです答えます。

あなたのController Fileに行き、クラスの前にこれを追加してください:

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。*で動作するはずです。

0
Akintunde

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
0
wobsoriano