はじめに
複雑な条件や独特なバリデーションを作成したい時に便利なルールオブジェクトです。
あまり余計なものを書かずにシンプルに説明しています。
目次
Rulesファイルの作成
下記コマンドでRulesファイルを作成する。
app/Rulesフォルダ下にファイルが作成される。
※命名規則は多分アッパーキャメル
$ php artisan make:rule ファイル名
例
$ php artisan make:rule CheckWords
Requestファイルにツールオブジェクトを設置
先程作成したCheckWordsをRequest.phpファイルのルールにセットする。
// Requestファイルでuse宣言
use App\Rules\CheckWords;
public function rules(Request $request)
{
return [
// new CheckWordsをバリデーションルールに追加
'content' => ['required', 'string', new CheckWords],
]
}
ルールの作成
ここでpasses( ) にオリジナルのバリデーションを記述。
passesの中に記述した処理がtrueの場合は、バリデーションを問題なく通過。
falseの場合は下記のmessage( )メソッドの内容でバリデーションエラーメッセージが表示される。
message( ) にバリデーションのエラーメッセージを記述する。
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class CheckWords implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
// $attributeにはフィールド名(content)、$valueにはリクエストで送信した
contentフィールドのデータが入っている。
// $valueに'#'が含まれていればtrue。含まれていなければfalseとなり、
下記message()内の処理を行う。
return strpos($value, '#');
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
// 通常のバリデーションエラーメッセージと同じように下記のエラーが表示される。
return '投稿にハッシュタグがありません。必ず一つ付けてください。';
}
}