はじめに
URLかどうかなんてDBに入れる前にフォームバリデーションで調べれば良いような気はしますが、それだとお客さんの要件にかなわないこともあるのです。つらい。
鬼の正規表現で調べても良いのですけど、そもそもLaravelにはURL文字列かどうか調べる機能はあるし、自力で鬼の正規表現を書くよりイケてる判定ができそうな気がするので、そいつを利用させてもらいたいものです。
基本的にバリデーションはRequestクラスをベースにしたRequestに面倒見させて、Controller側ではそいつをDIするってのが筋の良い書き方だとは思うのですが、そうじゃない使い方もできます。
Validatorインスタンスをmakeしようぜ
ちょっと長いのですが、実はこんな感じにするとValidatorは作れるのです。
// なんかDBのデータ取ってくる。こいつはurlというvarcharのカラムを持っていることとする。
$hoge_model = HogeModel::find($id);
// Validator::makeの第一引数は配列しか受けられないのでtoArrayしておく
$validator = Validator::make($hoge_model->toArray(), [
'url' => 'url'
]);
こんな感じにするとValidatorインスタンスを作ることができます。
第2引数は君らの好きなバリデーションルールです。
あとは
$validator->fails()
でバリデーションがしくじってたら true
が返ってきます。つまりちゃんとURL文字列であれば false
になるってことですね!
(追記)もっと簡単なやり方あった。
urlヘルパのこと調べてたらこんなんあったんかワレー!
URL::isValidUrl($url); // true or false