Laravel唯一验证必须在验证时包含附加文本

时间:2020-06-29 12:12:22

标签: laravel forms validation request laravel-validation

我正在使用Laravel租用软件包,其中数据库中有一个domains表,并且该表中domain列中的每个值都附加了.test.co.uk.

enter image description here

当用户在表单中输入URL时,将向他们显示一个输入元素(如上所示),在其中输入URL /域,但是已经附加了.test.co.uk,因此他们唯一需要输入的内容是在此之前的文本,例如他们将输入johnsmith,并在domain列中存储johnsmith.test.co.uk.我遇到的问题是,我需要在此列上进行唯一性验证,但还要包含.test.co.uk执行验证时,它会查看表中存储的值,因为如果用户输入johnsmithdomains表中当前有一条记录,其中值为johnsmith.test.co.uk,则验证将通过,但在这种情况下我需要验证失败。我目前正在使用Request类,它扩展了FormRequest类并具有以下特点:

public function rules()
{
   return [
       'url' => 'required|string|unique:domains,domain',
   ];
}

我也尝试过规则对象,但是我认为规则对象不是解决此问题的正确方法。有一种方便的“ Laravel”方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:2)

在您的Request类中,使用prepareForValidation()

文档:https://laravel.com/docs/7.x/validation#prepare-input-for-validation

protected function prepareForValidation()
{
    $this->merge([
        'url' => $this->url . '.test.co.uk',
    ]);
}