質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

7100閲覧

laravel5のカスタムバリデーションに対して複数の項目を同時にチェックできますか

red13

総合スコア79

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2016/01/27 09:43

laravel5のカスタムバリデーションを作成しています。
「項目Aと項目Bがそれぞれある値の場合はエラー」
のように複数項目を同時に見ることの出来るrulesはありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

最近、Laravel 5.1でカスタムバリデーションを作りました。その時、以下の資料を参考にしました。
資料はリンク切れになっていたので、その時とったメモを貼ります。


Laravel 5 の Custom Validation

irihit.hateblo.jp
公式の Documentation だとイマイチどこに何書けばいいのか分からんかったのでメモ。

カスタムバリデータ作成

オリジナルのバリデーションを定義するクラスを作成します。
今回は app ディレクトリ配下に Validator ディレクトリを作成して、その中に CustomValidator.php を設置しました。

<?php namespace App\Validator; use Illuminate\Validation\Validator; class CustomValidator extends Validator { /** * 日付の最大値をチェック * * @param $attribute * @param $value * @param $parameters * @return bool */ public function validateDateTo($attribute, $value, $parameters) { return (new \DateTime($value)) <= (new \DateTime($parameters[0])); } protected function replaceDateTo($message, $attribute, $rule, $parameters) { return str_replace(':date', $parameters[0], $message); } } validateDateTo 関数は、入力された日付が指定された日付以前かどうかを判定するための関数です。 replaceDateTo 関数は、上記チェックで異常と判定された時に、定義したエラーメッセージの文字列を置換するための関数です。 エラーメッセージの定義は後述します。 尚、カスタムバリデータクラスは必ず Illuminate\Validation\Validator を継承して下さい。 validate で始まる関数が、バリデータの名称となります。 例えば上記のコードでは、下記のようにバリデータを指定することが出来ます。 <?php namespace App\Http\Requests; class SampleRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'date' => [ 'dateTo:2014-12-31 23:59:59', ], ]; } } replace で始まる関数は、対応する validate で始まる関数の戻り値が false の時に呼び出されます。 例えば validateSample という関数で false が返されたら、replaceSample という関数が呼び出されて、エラーメッセージの置換処理を行います。 未定義の場合は、標準の置換処理のみを行います。 サービスプロバイダ作成 CustomValidator クラスを読み込むように、Validator 用のサービスプロバイダを作成します。 ServiceProvider が何たるかは検索検索ぅ。 <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class ValidatorServiceProvider extends ServiceProvider { /** * @return void */ public function boot() { \Validator::resolver(function($translator, $data, $rules, $messages) { return new CustomValidator($translator, $data, $rules, $messages); }); } /** * @return void */ public function register() { // } } 作成したサービスプロバイダを読み込むように、config/app.php の providers に追記します。 'providers' => [ // ... 'App\Providers\ValidatorServiceProvider', ] エラーメッセージの定義 エラーメッセージの定義方法はいくつかありますが、ここでは lang を利用した例を記載します。 lang/ja/validation.php の custom に、今回追加したバリデーションに対応するエラーメッセージを追記します。 * ロケーションは適宜読み替えて下さい。 'custom' => [ 'date' => [ 'date_to' => ':attribute は、:date 以前を指定して下さい。', ], ], 前述の例にあわせたエラーメッセージを定義しています。 date というパラメータに対して行った date_to のバリデーションのエラーメッセージを記載しています。 前述のとおり、エラーメッセージは replace 関数によって置換されます。 また、validate 関数はキャメルケースで記載しますが、エラーメッセージの定義はスネークケースで記載します。

投稿2016/02/04 06:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

red13

2016/02/05 00:27

別の実装方法を使用したため、今回のようなカスタムバリデーションは使用しませんでした。 今後使用する場合は参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問