LoginSignup
0
0

urlのバリデーションについて【Laravel】

Posted at

基本的な方法 (active_url)

Laravelのバリデーションルールにはactive_urlというルールがあります。
URLが実際に存在し、インターネット上でアクセス可能かどうかをチェックできます。

class TestRequest extends BaseFormRequest
{
    public function rules()
    {
        return [
            'url'  => ['required', 'active_url'],
            ];
        }
    }      

active_urlは、URLがDNS上で解決可能なものであるかどうかをチェックします。つまり、URLのドメイン名が実際に存在し、DNSによってIPアドレスに解決できるかどうかを確認します。

URLが形式的に正しい(つまり、有効なドメインを含む)ことを保証するために使用されますが、そのURLがHTTPステータスコード200であるかどうかは確認しません。

もしURLが404エラーを返す場合でも、active_urlはこれを「無効」とはみなしません。
DNSチェックが通過する限り(つまり、ドメインが存在し、DNSクエリがIPアドレスを返す限り)、URLは「有効」と見なされるためです。

アクセス可能かつ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がアクセス可能かどうかをチェックしています。

このルールは、URLがHTTPレスポンス(ステータスコード200系)を返すかどうかをチェックします。これにより、実際にページが存在するかどうかをより確実に判断できます。

ぜひ参考にしていただけると幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0