Laravel中的唯一字段验证问题

时间:2020-04-20 03:25:28

标签: php laravel validation laravel-5 laravel-6

我正在尝试验证laravel应用中的唯一条目

以下是我的验证数组,

$website = $websiteModel->find($id);

        $this->validate($request, [
            'subDomainName' => ['required','regex:/^[A-Za-z0-9 ]+$/'],
            'subDomainSuffix' => ['required'], 
            'packageType' => ['required'],
            'themeid' => ['required'],
            'lang' => ['required'],
            'user' => ['required'],
            'domain' => [
                'required',
                'string',
                'min:2',
                'max:255',
                Rule::unique('apps')->ignore($website)
            ],
        ], $request->all());

我的验证正常工作,但

当我尝试为我的域字段输入重复值时,它得到正确验证,但未显示错误消息,说对不起,该名称已存在...

<input type="text" id="domain" class="form-control" name="domain" >
{!! $errors->first('domain', '<span class="help-block" role="alert">:message</span>') !!}

在此范围内,它什么都没有显示,但是在常见错误消息区域中,它显示抱歉,表单无法更新...因此,如何正确验证该字段并显示相关的错误消息

4 个答案:

答案 0 :(得分:1)

执行以下操作:

在插入请求时使用

'domain' => [
   ...
   'unique:websites,domain'
]

根据更新请求使用

'domain' => [
   ...
   "unique:websites,domain,{$this->website->id}"
]

'domain' => [
   ...
   Rule::unique('websites', 'domain')->ignore($this->website)
]

答案 1 :(得分:0)

您通过了$ request-> all()作为验证消息。 请尝试:

$website = $websiteModel->find($id);

        $request->validate([
            'subDomainName' => ['required','regex:/^[A-Za-z0-9 ]+$/'],
            'subDomainSuffix' => ['required'], 
            'packageType' => ['required'],
            'themeid' => ['required'],
            'lang' => ['required'],
            'user' => ['required'],
            'domain' => [
                'required',
                'string',
                'min:2',
                'max:255',
                Rule::unique('apps')->ignore($website)
            ],
        ]);

答案 2 :(得分:0)

您是否不需要在“忽略规则”中传递重复的列来指示验证者忽略网站域(自我除外)?例如

Rule::unique('apps')->ignore($website->id)

答案 3 :(得分:0)

请尝试一下。有助于解决您的问题

在文件顶部使用异常和验证器

use Exception;
use Validator;

$rules = [
                'subDomainName' => 'required|unique:sub_domain_name',
            ];

            $validator = Validator::make($request->all(), $rules, $message);
            if ($validator->fails()) {
                throw new Exception(implode('\n', $validator->errors()->all()));
            }

sub_domain_name:这是数据库列名

相关问题