基本的な方法 (active_url)
Laravelのバリデーションルールにはactive_url
というルールがあります。
URLが実際に存在し、インターネット上でアクセス可能かどうかをチェックできます。
例
class TestRequest extends BaseFormRequest
{
public function rules()
{
return [
'url' => ['required', 'active_url'],
];
}
}
active_url
は、URLがDNS上で解決可能なものであるかどうかをチェックしますが、HTTPステータスコード200であるかどうかまでは確認しません。
もし404エラーを返す場合でも、これを「無効」とはみなしません。
DNSチェックが通過する限り(つまり、ドメインが存在し、DNSクエリがIPアドレスを返す限り)、「有効」と見なされます。
アクセス可能かつHTTPコードが200かどうかまで調べたいとき
カスタムバリデーションルールを作成します。cURLやGuzzleなどのHTTPクライアントを使用してURLにHTTPリクエストを送り、レスポンスをチェックする方法です。
Validator::extend('url_accessible', function ($attribute, $value, $parameters, $validator) {
try {
$response = Http::head($value);
return $response->successful();
} catch (\Exception $e) {
return false;
}
}, 'The URL is not accessible.');
Httpファサードを使用してURLがアクセス可能かどうかをチェックしています。
これにより、実際にページが存在するかどうかをより確実に判断できます。
ぜひ参考にしていただけると幸いです。