自分の場合は、AngularJsを使用しているので、
Angular2-Toaster
と組み合わせて使用しています。
インストール
composer:composer require kaoken/laravel-flash-message
初期設定
config\app.php
に以下のように追加:
'providers' => [
...
Kaoken\FlashMessage\FlashMessageServiceProvider::class,
],
'aliases' => [
...
'FlashMessage' => Kaoken\FlashMessage\Facades\FlashMessage::class,
],
ミドルウェア
下記のミドルウェアで、FlashMessage
をインスタンス化した$flashMessage
という変数で、全て、または一部のBladeテンプレートで使用できるようにする為のもので、view('test',['flashMessage' => FlashMessage::getInstance()])
という感じに、個々で使用したい場合は、追加しないこと。
app\Http\Kernel.php
に以下のように追加:
//-----------------------------------------------------
protected $middleware = [
...
Kaoken\FlashMessage\FlashMessageMiddleware:class
//-----------------------------------------------------
// または
protected $middlewareGroups = [
'web' => [
...
Kaoken\FlashMessage\FlashMessageMiddleware:class
//-----------------------------------------------------
// または
protected $routeMiddleware = [
...
'flash.message' => Kaoken\FlashMessage\FlashMessageMiddleware:class
メソッド一覧
メソッド一覧 | 説明 |
---|---|
getInstance() | 自身インスタンスを返す。 |
hasSuccess() | 成功メッセージがあるか?ある場合は’true’を返す。 |
hasInfo() | 情報メッセージがあるか?ある場合は’true’を返す。 |
hasWarnings() | 警告メッセージがあるか?ある場合は’true’を返す。 |
hasError() | エラーメッセージがあるか?ある場合は’true’を返す。 |
successes() | 成功メッセージを配列で取得する。 |
info() | 情報メッセージを配列で取得する。 |
warnings() | 警告メッセージを配列で取得する。 |
errors() | エラーメッセージを配列で取得する。 |
pushSuccess($msg) | 成功メッセージを加える。$msg の型は何でも良い。通常は、文字列を使用する。 |
pushInfo($msg) | 情報メッセージを加える。$msg の型は何でも良い。通常は、文字列を使用する。 |
pushWarning($msg) | 警告メッセージを加える。$msg の型は何でも良い。通常は、文字列を使用する。 |
pushError($msg) | エラーメッセージを加える。$msg の型は何でも良い。通常は、文字列を使用する。 |
使用例
Test
コントローラー
<?php
namespace app\Http\Controllers;
use FlashMessage;
use App\Library\Http\Controllers\Controller;
class Test extends Controller
{
public function getTest01()
{
// 文字列のみ
FlashMessage::pushSuccess('This is test messege');
// 任意のオブジェクト
$o = new \stdClass();
$o->title = 'title 01';
$o->text = 'text 01';
FlashMessage::pushError($o);
$o = new \stdClass();
$o->title = 'title 02';
$o->text = 'text 02';
FlashMessage::pushError($o);
return redirect('test02');
}
public function getTest02()
{
return view('test');
}
}
test.blade.php
テスト用テンプレート
@php
$errorMessages = $flashMessage->errors();
$successMessages = $flashMessage->successes();
@endphp
{{--成功メッセージ--}}
@if( $flashMessage->hasSuccess() )
<h1>成功メッセージ</h1>
@for($i=0;$i<count($successMessages);$i++)
<hr />
{{$successMessages[$i]}}
@endfor
<hr />
@endif
{{--エラーメッセージ--}}
@if( $flashMessage->hasError() )
<h1>エラーメッセージ-</h1>
@for($i=0;$i<count($errorMessages);$i++)
<hr />
{{ $errorMessages[$i]->title }}<br />
{{ $errorMessages[$i]->text }}<br />
@endfor
<hr />
@endif
例えば、最初の接続でhttp://hoge/test01
,Test@getTest01
呼び出した場合、FlashMessage
でメッセージが保存される。次の接続で、
http://hoge/test02
,Test@getTest02
呼び出した場合、テスト用テンプレートtest.blade.php
が表示され、
このとき下記のように表示される。
<h1>成功メッセージ</h1>
<hr />
This is test messege
<hr />
<h1>エラーメッセージ-</h1>
<hr />
title 01<br />
text 01<br />
<hr />
title 02<br />
text 02<br />
<hr />
更新ボタンを押すと、FlashMessage
内の全てのメッセージ削除され、表示されなくなる。