Laravel 拉威尔5.8。如何在验证期间修剪http并检查表中的唯一性? 有一个商店表,在其中,我们存储的URL与HTTP和https已经切断。示例:rozetka.ua,comfy.ua 从前端到验证请求,尚未处理的URL以HTTP或https的形式到达。比如说 如何检查站点的唯一性?验证检查URL,带有初步HTTP的选项不适用 由于站点已被配置为处理错误以及拦截前端和后端验证,因此有必要在验证请求时将其视为唯一错误。即状态422和相应的错误对象

Laravel 拉威尔5.8。如何在验证期间修剪http并检查表中的唯一性? 有一个商店表,在其中,我们存储的URL与HTTP和https已经切断。示例:rozetka.ua,comfy.ua 从前端到验证请求,尚未处理的URL以HTTP或https的形式到达。比如说 如何检查站点的唯一性?验证检查URL,带有初步HTTP的选项不适用 由于站点已被配置为处理错误以及拦截前端和后端验证,因此有必要在验证请求时将其视为唯一错误。即状态422和相应的错误对象,laravel,validation,Laravel,Validation,到目前为止,我一直坚持这个选择: return [ 'url' => [ 'required', 'string', 'url', 'max:255', function ($attribute, $value, $fail) { $url = parse_url($value, PHP_URL_HOST); if (Store::where('url', $

到目前为止,我一直坚持这个选择:

return [
    'url' => [
        'required',
        'string',
        'url',
        'max:255',
        function ($attribute, $value, $fail) {
           $url = parse_url($value, PHP_URL_HOST);
           if (Store::where('url', $url)->count() > 0) {
              $fail('The ' . $attribute . ' has already been taken.');
           }
        },
    ],
]
试试这个:

返回[
“url”=>[
“必需”,
'字符串',
“url”,
“最大值:255”,
'唯一:表格的名称,列的名称',
],
]

或者,您可以创建自定义规则:

php artisan make:rule UniqueUrl
//UniqueUrl类
公共函数传递($attribute,$value)
{
$url=str_replace(parse_url($value,PHP_url_SCHEME)。':/','$value);
return Store::where('url',$url)->count==0;//如果没有这样的url,则为true;如果至少有一个url,则为false
}
并使用它:

返回[
“url”=>[
“必需”,
'字符串',
“url”,
“最大值:255”,
新的UniqueUrl,
],
]

您的代码应该已经可以工作了,不是吗?我不太明白你的问题是什么?如果数据库中缺少字段,您可以使该字段唯一。例如,用户将输入
https://example.com
http://example.com
您需要删除http或https,并检查您存储的表中是否存在唯一性,而不使用https或http am i clearyes,如果不唯一-返回错误唯一,状态为422,同一对象错误不起作用。从前面来的是HTTP。在不带HTTP的表链接中。“从前面来HTTP”-也只有HTTP或https?从前面到验证请求,尚未处理的URL以HTTP或https到达。这是一个很好的选择,谢谢,但必须返回相同的唯一错误对象,因为有一个库可以用不同语言的对应翻译替换不同类型的错误。因此,我需要它检查惟一性,否则,我的$fail(“.$attribute.”已被采用)就足够了;“但必须返回相同的唯一错误对象”-您可以在规则类内的
message()
方法中定义它。