Laravel – 動的メッセージ表示

概要

バリデーションエラーや登録成功などのメッセージを一時的に表示する方法を整理する。

ダイアログによりブラウザー表示領域とは別に表示する方法と、表示領域にメッセージを出して動的に消去する方法の2つ。

エラー・成功メッセージの登録

以下のような例で考えていく。

  • GETリクエストから表示用コントローラー・アクションにルーティング
  • アクションからフォームを含むページを呼び出す
  • フォームにユーザー名とメールアドレスの入力テキストボックスを配置

  • 送信ボタンが押された場合のPOSTに対して、バリデーション用コントローラー・アクションにルーティング
  • バリデーション用アクションでは、ユーザー名とメールアドレスのバリデーションを記述
    • バリデーション結果が妥当な場合はflash()で成功メッセージを登録
    • バリデーション結果が妥当でない場合は、それ以降は実行されず$errorsに結果が保存される
  • いずれの場合も元のGETルートにリダイレクトされる

状況に応じて登録された/空のままの$errorsflashに対して、ビュー側で表示する。

ダイアログ表示

$errorsflashをダイアログで表示する方法。

ビューのhead要素内で、これらの状態に応じたメッセージを生成し、Javascriptのalertの引数に渡している。

複数のエラーメッセージを改行文字を挟んでつなげるのに、PHPのinplode()関数を使っている。

スライドアップによる一時表示

エラーや成功メッセージをブラウザーの上部などに表示し、一定時間後にそれをスライドアップなどで消去する。

メッセージ表示領域の設定と、Javascriptによる動的な消去の2段階で整理する。

メッセージ表示エリアの設定

ビューのbody要素最上部で、ディレクティブによってメッセージ表示領域を動的に生成している。その際に、エラー/成功に応じたクラスを要素に設定している。

  • $errors->any()でエラーが登録されていれば、エラー表示領域を生成
  • session()->has()で成功メッセージが登録されていれば成功メッセージ表示領域を生成

ビューのhead要素内で、エラーメッセージ領域/成功メッセージ領域それぞれのクラスに応じたスタイルを設定している。

なお、エラーメッセージは複数のメッセージを改行で表示させたいので、PHPのImplode()関数で区切りを<br>としたうえで{!! ... !!}で囲んでエスケープを抑制している。

メッセージ表示エリアの消去

エラー/成功のクラスに対して、JQueryでこれらをスライドアップして消去するスクリプトを追加する。

  • 5行目でJQueryをCDNで読み込み
  • script要素内でスライドアップの動作を定義

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です