今回調べたルール

  • file
  • filled
  • image
  • in:boo,bar
  • in_array:別のフィールド
  • integer
  • ip
  • json
  • max:値
  • mimetypes

file

ファイルのアップロードに成功したかどうかをバリデートします。

後ででてくるimageルールでも使われている$this->isAValidFileInstance()が判定します。

filled

公式ドキュメントではこのように書かれています。

フィールドが存在する場合、空でないことをバリデートします。

つまり、指定のフィールドが存在している場合に、そのフィールドに対してrequiredのルールを適用しているというこです。

コードを見てもらえば分かる通り、Arr::has()で指定のフィールドの存在確認をしています。また$this->dataはフィールド名と値の連想配列です。

使い方はrequiredと同じです。

この例だと、bodyというフィールドが存在しますので、空だとエラーになります。しかし、存在していない場合、そのままtrueを返します。

HTMLで指定のフィールドを書かなければ何も起きないのです。

image

アップロードされたファイルが画像()かどうかをバリデートします。

ファイルがアップロードされるとUploadedFileというインスタンスが生成されます。validateImage()$valueはこれです。

そして、validateMimes()$this->isAValidFileInstance()で受け取った$valueがインスタンスかどうか、またエラーなくアップロードされたかを判定しています。

最後に、パスが空ではない、かつ拡張子がjpeg,、png、gif、bmp、svgであればtrueを返します。

in:foo,bar

簡単に言うと、配列(複数のinputフィールド)に対応したin_arrayです。ただし、inputのフィールドは1次元の配列に限ります。

:(コロン)で区切ったあとに、カンマ区切りでリストの指定をします。このリストはin_arrayの第2引数になります。つまり、入力した値がリストに存在するかどうかを判定します。

inputフィールドが1つの場合は特に解説の必要はありません。入力値がfooもしくはbarなら通ります。

inputフィールドが複数だった場合です。

入力値が配列、かつarrayというルールがある時にバリデートされます。なので、対象のフィールドにarrayルールを追加しましょう。

foreachで受け取った値をループさせていますが、配列が含まれている場合はfalseを返します。つまり2次元以上の配列の場合です。

最後にcount関数とarray_diff関数で入力値とリストとの差分を出して判定しています。

in_array:他のフィールド

指定のフィールの値が、他のフィールドの値と一致するかをバリデートします。また、指定のフィールドや他のフィールドは配列でもバリデート可能です。

in_arrayと名がつくので配列でのバリデートがほとんどだと思います。

基本は次のように書きます。

fooというフィールドが指定のフィールドで、barというフィールドは入力済みです。この場合だと、fooで入力した値が1か2であればtrueを返します。barの値は1か2なので、仮にそれ以外の値ならfalseを返してエラーとなります。

fooに1,2,3を入力してテストボタンを押すと、3番目だけエラーになります。

in_arrayのテスト1

in_arrayのテスト2

次元が増えても問題ないです。.(ドット)で区切ることで対応できます。

この場合は、fooという配列の中のfoo_idの値が、barという配列の中のbar_idのいずれかであればtrueを返します。

結果は上と同じになりますが、.(ドット)区切りで次元に対応できることを覚えておくといいと思います。

integer

filter_var関数を使って、フィールドの値が整数値かどうかをバリデートします。

整数なので、小数はエラーになります。

ip

filter_var関数を使って、フィールドの値がipの形式かどうかをバリデートします。

json

フィールドの値がJSON文字列かどうかをバリデートします。

jsonなので、こんな感じです。

{"name":"t.oda"}

max:値

入力した値が最大値以下かどうかをバリデートします。

あとで出てくるsizeや、以前出てきたbetweenと同様です。文字列、数値、ファイルサイズの判定ができます。

mimetypes

フィールドが指定のMIMEタイプかどうかをバリデートします。

※次ででてくるmimesルールとの違いがわかりません。各自お調べください。

まとめ

fileimageはよく使われると思います。

integermaxなんかも使い所は多そうです。