バリデーションルールは、Illuminate\Contracts\Validation名前空間の Rule というクラスを継承して作られる。
このRuleを継承したクラスを用意して、ルールを作成する。
# app/Rules/Myrule.php が作成される。
php artisan make:rule Myrule
Myrule.php
//作成されるソース
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Myrule implements Rule
{
public function __construct()
{
//
}
public function passes($attribute, $value)
{
# ルールの通過条件を記載
# $attribute: ルールの属性
# $value: チェックする値
}
public function message()
{
# 返すメッセージ
return 'The validation error message.';
}
}
使用例)
Myrule.php
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Myrule implements Rule
{
public function __construct($n)
{
//インスタンス生成時、バリデーションのルールとなる値を入力
$this->num = $n;
}
public function passes($attribute, $value)
{
//ルールとなる値($n)で入力された$valueが割り切れるかチェック(true or falesを返す)
return $value % $this->num == 0;
}
public function message()
{ //function passesメソッドでfalseが返された時に、返すメッセージの設定
return $this->num . 'で割り切れる値が必要です。';
}
}
HelloRequest.php
//FormRequest
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use App\Rules\Myrule;
class HelloRequest extends FormRequest
{
public function authorize()
{
if ($this->path() == 'hello')
{
return true;
} else {
return false;
}
}
public function rules()
{
return [
//Myruleクラスのインスタンスを作成。コンストラクタに 5 を渡す。
'age' => new Myrule(5)
];
}
}