Laravel Laravel-admin PHP プログラミング

【Laravel-admin】バリデーションルールの追加

投稿日:2019年2月11日 更新日:

どうもこんばんは。

突然ですが、先日2月15日、RISING SUN ROCK FESTIVALにてNUMBER GIRLの復活が報じられました。

NUMBER GIRLがオリジナルメンバーで復活!「RISING SUN ROCK FESTIVAL 2019 in EZO」第1弾発表

この復活をリアルタイムで知ることができて本当に嬉しい!興奮する!

でも北海道はちょっと遠い…

もしNUMBER GIRLを聴いたことがない方がいれば是非お勧めです。

本題

前回はリレーション定義を行い、リレーションシップに対応した新規作成や一覧画面などの各操作画面を作成しました。

Laravel-adminのコントローラでは、一対多などのリレーションにあるカラムでであっても、

分かりやすく簡単に画面に表示することが可能でした。

そして、バリデーションについても、Laravel-adminではLaravelのバリデーションを活用しつつ、

コントローラで簡単に実装が可能なようなので、実際に試してみることにしました。

Laravel-adminでのバリデーションについて

Laravel-adminの公式ドキュメントに簡単なデモが掲載されています。

上記ページにも書かれている通り、

LaravelのバリデーションルールをLaravel-adminのコントローラの、

記述ルールにのっとっることで指定したバリデーションルールを適用できる、という流れになります。

基本的にはLaravel標準のバリデーションが使用できるようですが、実際にどこまでのことが出来るのか試してみたいと思います。

とりあえずLaravelで可能なバリデーションルールを用途別に検証していきたいと思います。

基本形

以下のようにLaravelのバリデーションルールをformのrules関数の中に記述すれば使用できます。

requiredはもちろんrequired_ifなど入力条件によって必須項目を流動的に制御するバリデーションも設定可能です。

hasManyのrequired_if

一対多のリレーション以外は先述の方法でバリデーションルールを設定することが可能ですが、
 
hasManyの項目に関してはrequired_ifが同じ方法では動作しません。
 
どうしたもんかと思いましたがこちらのサイトで設定方法を紹介してくれていました!
 
対象のコントローラでupdate()をオーバライドし、Validatorに入力データを渡すことでバリデーションルールを設定することができます。
 

女性のみ趣味欄が入力必須というトンデモ仕様ですが(笑)、こんな感じでhasManyの項目に対してもバリデーションルールを設定することができます。

エラーメッセージの日本語化&カスタマイズ

バリデーションのメッセージのカスタマイズ方法はいくつかありますが、

バリデーション用の言語ファイルで一括管理すると変更も容易です。

config/app.phpの「locale」を「ja」に変更後、resources/lang/ja配下に、

validation.phpを作成するし、バリデーションメッセージを設定することができます。

参考:Laravelのバリデーション

試しにバリデーションメッセージを変更します。

一対一のフォームは以下のようになります。

hasManyのバリデーションは以下です。

以上のようにLaravel-adminのフォームにおいてもLaravel標準のバリデーションを十分に使用することができます!

印象としては、hasManyはちょっとやっかいな気がします。

encore配下をガンガンカスタマイズすればもっと自由度は向上しそうですが、

更新で消えてしまいますからなんとも…

プルリクエストはとてもじゃありませんが勇気ありません(笑)

そもそもフレームワークの拡張の理想の運用ってどんな感じなんでしょうね。

encore配下をapp配下にもってきてガンガンカスタマイズするのが普通なんですかね。

みんなプルリクエストって気軽に送ってたりしてんのかなぁ。

 

-Laravel, Laravel-admin, PHP, プログラミング

関連記事

【Laravel】factoryを使用してテストデータを作成

factoryとは WEBアプリケーションのテストを行う際にテスト用のデータが必要になりますが、 テストデータ挿入用のSQLファイルを作成するのも時間がかかりますし、大量のデータで試験を行う場合はかな …

【SendGrid】SendGridでトランザクションテンプレート作成

はじめに 前回SendGridに登録を行いAPIKeyの作成を行いました。 関連記事:【SendGrid】SendGridについての概要 この記事ではSenGridのトランザクションメールのテンプレー …

【Laravel-admin】リレーション関係を持ったCRUD作成(1対1、1対多、多対多)

前回、【Laravel-admin】Laravel-adminで新規テーブルを作成しCRUD画面を追加する方法でLaravel-adminでテーブルのCRUD画面を作成しました。 単一のテーブルであれ …

【Laravel&Laravel-admin】artisanコマンドまとめ

Laravelにおいての「artisan」コマンドでは簡単にコントローラやモデルの作成等が行えます。 使用のたびに公式から探すのも面倒なのでまとめておきたいと思います。 いざ調べてみると結構面白く、知 …

【Laravel】Laravel&Laravel-adminでの論理削除 ~ORMとDBファサード~

Laravelでは論理削除を行う機能が備わっています。 論理削除と物理削除に関しては以下に詳しく紹介されています。 参考:論理削除と物理削除とは データを削除したいけれど、後々データの復元を行う可能性 …