| 存在チェック
用語 | 使用例 | 説明 |
---|---|---|
required | required | 入力必須 |
present | present | フィールドが存在しているかどうか(存在していれば空でも許す) |
nullable | nullable | nullableな内容を許容する |
filled | filled | フィールドが存在する場合は空でないかどうか(存在していなければ許す) |
in | in:foo,bar | 指定されたリストの中の値に含まれているかどうか(例だとfooかbarが値ならOK) |
not_in | not_in:foo,bar | inの含まれない版 |
in_array | in_array:別のフィールド | フィールドの中身が別のフィールドの値のどれかであるかどうか |
| 型チェック関連
論理値
用語 | 使用例 | 説明 |
---|---|---|
boolean | boolean | 論理値かどうか(文字列の1や0も含む) |
accepted | accepted | yes,on, 1, trueのどれかであるかどうか |
文字列判定
用語 | 使用例 | 説明 |
---|---|---|
string | string | 文字列であるかどうか |
alpha | alpha | 中身が全部英字かどうか*1 |
alpha_dash | alpha_dash | 英字または-または_であるかどうか*1 |
alpha_num | alpha_num | 英数字であるかどうか*1 |
メールアドレスの形式であるかどうか*2 | ||
url | url | URLの形式であるかどうか(filter_var) |
active_url | active_url | URLが有効かどうか(checkdnsrr) |
ip | ip | ipアドレスの形式かどうか |
json | json | json文字列であるかどうか |
timezone | timezone | タイムゾーンの文字列であるかどうか(timezone_identifiers_list) |
regex | regex:正規表現 | 正規表現にマッチするかどうか。正規表現にパイプが含まれるときはパイプ不可 |
uuid | uuid | フィールドがUUIDの形式にマッチしているかどうか |
日付判定
用語 | 使用例 | 説明 |
---|---|---|
date | date | 日付かどうか(strtotime) |
date_format | date_format:”Y-m-d” | 日付フォーマットが一致しているかどうか。dateと一緒には使えない |
after | after:tomorrow after:start_date |
対象の日付以降かどうか(strtotime)。他のフィールドとも比較可能 |
before | before:today | ↑の日付以前ばーじょん |
afterとかbeforeは期間指定とかするときに役立ちそう
数値判定
用語 | 使用例 | 説明 |
---|---|---|
integer | integer | 整数かどうか |
numeric | numeric | 数値かどうか(is_numeric) |
digits | digits:2 | 数値であり、値の桁数であるかどうか(例では2桁) |
digits_between | digits_between:1,5 | 数値であり、桁数が最小値から最大値の間かどうか(例だと1~5桁) |
配列判定
用語 | 使用例 | 説明 |
---|---|---|
array | array | 配列かどうか |
distinct | distinct | 対象が配列のときに重複がないかどうか |
| 大きさ判定
用語 | 使用例 | 説明 |
---|---|---|
size | size:20 | 指定された値であるかどうか。文字列の場合は文字長で数値なら整数値、ファイルならキロバイトのサイズ。 |
min | min:1 | 指定された値以上かどうか。文字にも数値にもファイルにも使える |
max | max:5 | 指定された値以下かどうか。文字にも数値にもファイルにも使える |
between | between:1,5 | 最小値から最大値の間のサイズかどうか。文字にも数値にもファイルにも使える |
| 比較判定
比較判定系のバリデーションはすでにマージされていて、minやmaxなどと異なる点は、比較判定系は同じ型であることが要求され、フィールド名を指定することも可能である点です。
用語 | 使用例 | 説明 |
---|---|---|
gt | gt:数値またはフィールド名 | 対象の数値より大きいかどうか(>) |
gte | gte:数値またはフィールド名 | 対象の数値以上かどうか(>=) |
lt | lt:数値またはフィールド名 | 対象の数値より小さいかどうか(<) |
lte | lte:数値またはフィールド名 | 対象の数値以下かどうか(<=) |
| ファイル判定
用語 | 使用例 | 説明 |
---|---|---|
file | file | ファイルであるかどうか |
image | image | ファイルが画像かどうか(jpg,png,bmp,gif,svg) |
dimensions | dimensions:パラメータ | バリデーションする画像がパラメータに指定されたサイズに一致するか(min_width,max_width,min_height,max_height,width,height,raito) |
mimes | mimes:jpg,png | ファイルが指定された拡張子かどうか |
dimensionsは5.4からルールの指定をコードでやることも可能。
(Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2)
)
| 同値チェック
用語 | 使用例 | 説明 |
---|---|---|
confirmed | confirmed | フィールド名_confirmation フィールドと同値であるかどうか |
same | same:フィールド名 | 指定したフィールドと同じ値であるかどうか |
different | different:フィールド名 | 指定フィールドと値が異なるかどうか |
| その他
exists
例1: exists:states
上記の場合は、statesテーブルのフィールド名カラムにフィールドの値が存在することを確認します。なので、"state" => "exists:states"
という指定の場合はstatesテーブルのstateカラムということになります。
例2: exists:states,abbreviation
上記の場合は、statesテーブルのabbreviationカラムにフィールドの値が存在することを確認します。
例3: exists:staff,email,account_id,1
staffテーブルのaccount_idが1であるレコードのemailカラムにフィールドの値が存在することを確認します。(つまりwhereです)
1の部分は!を使って条件否定も出来たり、NULLやNOT_NULLの指定も可能です。
例4: Ruleクラス(Existsクラス)を利用した書き方
例3のようになってくると、コード化しておいたほうがわかりやすいのでこちらを使うほうが良いでしょう。
use IlluminateValidationRule;
Validator::make($data, [
'email' => [
'required',
Rule::exists('staff')->where(function ($query) {
$query->where('account_id', 1);
}),
],
]);
unique
uniqueは一意であることを確認します。existsとほとんど変わりません。
よくある例は、"email" => "unique:users,email_address"
みたいな感じですね。
なお、バリデータは基本的にデフォルトのデータベース接続を行うのでもしも指定したい場合はunique:connection名.users
のようにするみたいです。
existsと違う点は第3パラメータ以降です。existsでは第3パラメータ以降はwhereだったのですが、uniqueの場合は違います。
uniqueの場合、第3パラメータには除外したいIDを指定します。これがある理由は、自身の情報を更新している際にuniqueチェックが入ってしまうとエラーになってしまうからです。
(email以外のフィールドを更新しているのに、emailもformに渡された結果、validationの際にuniqueチェックで失敗する)
また、第4引数には第3引数を適用するカラム名を指定できます。デフォルトではidが指定されています。
この第3、4パラメータを除いて、whereを書くには以下のようにする必要があります。
'email' => 'unique:users,email,NULL,id,account_id,1'
訳:usersテーブルでidカラムがnullの物を除き、account_idが1の物でemailカラムがフィールドの値に存在しないことを確認します。(select count(id) from users where id is not null and account_id = 1 and email = ?みたいな感じだと思われ)
また、5.3以降ではRuleクラス(Uniqueクラス)を利用した書き方も出来ます。
use IlluminateValidationRule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
required_ifとrequired_unless
例1:required_if:state,0
例2:required_if:flag,1,2
flagフィールドに1または2を持っている場合に、このフィールドが入力されているかを確認します。(例2)unlessの場合は持っていない場合に確認します。
required_withとrequired_with_all
例: required_with:foo,bar
fooまたはbarフィールドが存在している場合だけ、このフィールドが入力されているかを確認します。with_allは指定されているフィールド全てが存在している場合です。
required_withoutとrequired_without_all
上記のrequired_with,with_allの逆バージョンです。存在しない時に入力チェックが走ります。