Laravel 唯一验证必须在验证时包含附加文本
Laravel unique validation must include appended text when validating
我正在使用 Laravel 租赁包,其中在我的数据库中有一个 domains
table 以及此 [=39] 中 domain
列中的每个值=] 附加 .test.co.uk.
当用户在表单中输入 URL 时,他们会看到一个输入元素(如上所示),他们在其中输入 URL/Domain 但 .test.co.uk
已经附加所以他们唯一需要输入的是之前的文字,例如他们将输入 johnsmith
并在 domain
列中存储 johnsmith.test.co.uk.
我遇到的问题是我需要对此列的验证是唯一的,但也包括 .test.co.uk
在执行验证时,它会查看存储在 table 中的值,因为如果用户输入 johnsmith
并且当前在 domains
table 中有一条记录,其中值是 johnsmith.test.co.uk
那么验证将通过,但在这种情况下我需要验证失败。我目前正在使用扩展 FormRequest
class 的 Request
class 并且有这个:
public function rules()
{
return [
'url' => 'required|string|unique:domains,domain',
];
}
我也尝试过规则对象,但我认为规则对象不是解决此问题的正确方法。有没有方便的“Laravel”方式来做到这一点?
在您的请求中 class 使用 prepareForValidation()
文档:https://laravel.com/docs/7.x/validation#prepare-input-for-validation
protected function prepareForValidation()
{
$this->merge([
'url' => $this->url . '.test.co.uk',
]);
}
我正在使用 Laravel 租赁包,其中在我的数据库中有一个 domains
table 以及此 [=39] 中 domain
列中的每个值=] 附加 .test.co.uk.
当用户在表单中输入 URL 时,他们会看到一个输入元素(如上所示),他们在其中输入 URL/Domain 但 .test.co.uk
已经附加所以他们唯一需要输入的是之前的文字,例如他们将输入 johnsmith
并在 domain
列中存储 johnsmith.test.co.uk.
我遇到的问题是我需要对此列的验证是唯一的,但也包括 .test.co.uk
在执行验证时,它会查看存储在 table 中的值,因为如果用户输入 johnsmith
并且当前在 domains
table 中有一条记录,其中值是 johnsmith.test.co.uk
那么验证将通过,但在这种情况下我需要验证失败。我目前正在使用扩展 FormRequest
class 的 Request
class 并且有这个:
public function rules()
{
return [
'url' => 'required|string|unique:domains,domain',
];
}
我也尝试过规则对象,但我认为规则对象不是解决此问题的正确方法。有没有方便的“Laravel”方式来做到这一点?
在您的请求中 class 使用 prepareForValidation()
文档:https://laravel.com/docs/7.x/validation#prepare-input-for-validation
protected function prepareForValidation()
{
$this->merge([
'url' => $this->url . '.test.co.uk',
]);
}