【问题标题】:How to validate a custom URL in laravel with protocols specified?如何使用指定的协议验证 laravel 中的自定义 URL?
【发布时间】:2021-02-16 13:05:44
【问题描述】:

我想用指定的协议验证 URL。

HTTP 和 HTTPS 类型验证不适用于以下 URL。

  1. 如果 URL 是安全的,请参见下文。

    rtmps://username:password@server:port/

  2. 如果没有安全的 URL 将如下所示。

    rtmp://server:port/

我只需要验证以上 2 个 URL。

我已经尝试过 laravel 的 URL 类型验证,但它没有验证这些协议。

还想告诉你,只有我能使用的是正则表达式验证,因为它是 laravel 的一个请求类,我在其中放置了验证规则。 laravel 6.2版

【问题讨论】:

标签: php laravel


【解决方案1】:

运行这个命令:

`php artisan make:rule ValidateRTMPUrlRule`

此命令将创建一个自定义规则类

`
 <?PHP

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class ValidateRTMPUrlRule implements Rule
{
/**
 * Create a new rule instance.
 *
 * @return void
 */
public function __construct()
{
    //
}

/**
 * Determine if the validation rule passes.
 *
 * @param  string  $attribute
 * @param  mixed  $value
 * @return bool
 */
public function passes($attribute, $value)
{
   
    $result = parse_url($value);
    $scheme = strtolower($result['scheme']);
    if('rtmp' == $scheme)
    {
        if(isset($result['user']))
        {
            return false;
        }
        if(isset($result['pass']))
        {
            return false;
        }
        return true;
    }
    if('rtmps' == $scheme)
    {
        if(!isset($result['user']))
        {
            return false;
        }
        if(!isset($result['pass']))
        {
            return false;
        }
        return true;
    }
    return false;
}

/**
 * Get the validation error message.
 *
 * @return string
 */
public function message()
{
    return ':attribute is not a valid RTM protocol url.';
}

}
`

然后在你的请求中

`$data = $request->validate([
        'url' => ['required', new ValidateRTMPUrlRule],
    ]);`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2015-07-10
    • 2010-09-09
    • 2017-05-28
    • 2016-10-29
    相关资源
    最近更新 更多