数组项的Laravel条件验证规则



我有以下工作验证规则,用于检查以确保每个收件人、抄送、密件抄送的电子邮件列表都包含有效的电子邮件地址:

return [
'recipients.*' => 'email',
'cc.*' => 'email',
'bcc.*' => 'email',
];

我还需要能够允许字符串###EMAIL###以及这些规则中的每一个的电子邮件验证,并努力在Laravel 5.8中创建自定义验证规则(目前无法升级(。

知道怎么做吗?如果它是Laravel的更高版本,我会想一些类似(未测试(的东西,让你知道我想做什么:

return [
'recipients.*' => 'exclude_if:recipients.*,###EMAIL###|email',
'cc.*' => 'exclude_if:recipients.*,###EMAIL###|email',
'bcc.*' => 'exclude_if:recipients.*,###EMAIL###|email',
];

在5.8中,您可以创建自定义规则对象。让我们看看如何实际使其工作。

  1. 使用php artisan make:rule EmailRule创建规则
  2. 把它做成这样
<?php
namespace AppRules;
use IlluminateContractsValidationRule;
class EmailRule implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param  string  $attribute
* @param  mixed  $value
* @return bool
*/
public function passes($attribute, $value)
{
if ($value === '###EMAIL###' or filter_var($value, FILTER_VALIDATE_EMAIL)) {
return true;
}
return false;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The :attribute must be valid email or ###EMAIL###.';
}
}
  1. 包含在您的规则中,使其看起来像
return [
'recipients.*' => [new EmailRule()],
'cc.*' => [new EmailRule()],
'bcc.*' => [new EmailRule()],
];
  1. 编写测试(可选(

最新更新