laravel - 数组项的 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 中,您可以创建自定义规则对象让我们看看我们如何实际使其工作。
- 创建你的规则
php artisan make:rule EmailRule
- 让它看起来像这样
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
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()],
];
- 编写测试(可选)
推荐阅读
- java - 如何使用地图处理对象以进行 CSV 输出
- html - 未找到任何参数的“编辑”反向。尝试了 1 种模式:['wiki/edit/(?P
[^/]+)/$'] - r - 通过组合类别的二进制列?
- r - 从两个列表创建全局环境对象
- c# - 为什么 MySQL 连接器声称已经有一个打开的 DataReader 而没有?
- python - 导入 csv 模块文件未打开
- django - 我无法上传多个大文件
- r - 如何使用多个条件创建数据库子集?
- python-3.x - Pytesseract - 带有彩色文本的图像上的 OCR
- aws-lambda - AWS - apiLambda 与 defaultLambda