致命的なエラーが発生したときにメッセージを表示して前のページにリダイレクトしようとしています。
App::fatal(function($exception)
{
return Redirect::back()->with('msg', 'The Message');
}
ビューでmsgにアクセスしようとしています
Sessions::get('msg')
しかし、何もレンダリングされていません、私はここで何か悪いことをしていますか?
やってみる
return Redirect::back()->withErrors(['msg', 'The Message']);
そしてあなたの視野の中でこれを呼び出します
@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
レベル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');
代替アプローチは
コントローラ
Session::flash('message', "Special message goes here");
return Redirect::back();
見る
@if (Session::has('message'))
<div class="alert alert-info">{{ Session::get('message') }}</div>
@endif
Laravel 5.4では、以下がうまくいきました。
return back()->withErrors(['field_name' => ['Your custom message here.']]);
エラーがあります(スペルミス):
Sessions::get('msg')// an extra 's' on end
する必要があります:
Session::get('msg')
私は、今はうまくいくはずだと思います。
フラッシュメッセージを設定し、コントローラー関数から戻るようにリダイレクトするだけです。
session()->flash('msg', 'Successfully done the operation.');
return redirect()->back();
そして、ビューブレードファイルでメッセージを取得できます。
{!! Session::has('msg') ? Session::get("msg") : '' !!}
Laravel 5.5:
return back()->withErrors($arrayWithErrors);
Bladeを使ったビューでは:
@if($errors->has())
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
私はあなた自身のためにそれをすべて扱う 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/'ディレクトリに配置されます。
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
楽しい
私は同じ問題に直面し、これはうまくいきました。
コントローラ
return Redirect::back()->withInput()->withErrors(array('user_name' => $message));
見る
<div>{{{ $errors->first('user_name') }}}</div>
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
コントローラ内
例えば
return redirect('login')->with('message',$message);
ブレードファイル内メッセージは変数ではなくセッションに保存されます。
例えば
@if(session('message'))
{{ session('message') }}
@endif
Laravel 3の場合
@ giannis christofakisという回答を読んでください。 Laravel 3を使用している人のためのもの3
return Redirect::back()->withErrors(['msg', 'The Message']);
と:
return Redirect::back()->with_errors(['msg', 'The Message']);
次のようにリダイレクトしようとしたときに、このメッセージが表示されました。
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();
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。*で動作するはずです。
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