我有以下工作验证规则,用于检查以确保每个收件人、抄送、密件抄送的电子邮件列表都包含有效的电子邮件地址:
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中,您可以创建自定义规则对象。让我们看看如何实际使其工作。
- 使用
php artisan make:rule EmailRule
创建规则 - 把它做成这样
<?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###.';
}
}
- 包含在您的规则中,使其看起来像
return [
'recipients.*' => [new EmailRule()],
'cc.*' => [new EmailRule()],
'bcc.*' => [new EmailRule()],
];
- 编写测试(可选(