スイーツ(笑)と呼ばないで!!
| |||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||
11/24/09:49 [PR] |
05/12/03:09 Validatorのソースを読もう!!前回、Form Request Validationについて書きました。
その中で、rulesメソッドに、例えば public function rules() { return [ ‘title’ => ‘required|between:3,100’, ‘body’ => ‘required|min:10’, 'url' => 'required|url' ]; } こんな感じに書くとvalidationが簡単に書けることを紹介しました。 これは ・titleは必須で3文字以上100文字以下 ・bodyは必須で10文字以下 ・urlは必須でURLの形式 とかって意味になります。 超、簡単ですねー。 でも、何か気になりませんか? URLの形式ってなんでしょう? URLの形式チェックなら ◯ http://abc.com ◯ https://abc.com/def.html ☓ ttp://abc.com なんとなく、無意識にこんな動きを期待しませんか? でも、実は先頭のhが足らない ttp://abc.com はvalidationを通過します。 それどころか hello://abc.com とかでも通過してしまいます。つまり「:」の前は何でもOKなんですね。 これはValidatorのソースを読むとわかります。 ValidatorのvalidateUrlというメソッドの中では、 filter_var($value, FILTER_VALIDATE_URL) というPHP標準関数を呼び出しています。 実はこの FILTER_VALIDATE_URL という指定ではrfc2396に準拠しているかは見ますが妥当なプロトコルを指定しているかまでは見ません。 したがって、 'url' => 'required|url' というvalidation ruleの指定はwebサイトのURLチェックとしては不十分ということになるのです。 また、laravelにはactive-urlという似たような名前のvalidation ruleがありますが、こちらも注意が必要です。 これは最終的には実はそのホストのDNSのAレコードが存在するかというチェックだったりします。 興味のある人は是非ソースを読んでみてください。 ということで、今回のお話は、命名だけで信用せず、大事なところはソース読もうねー、というお話でした。 PR
|
|
|