我正在尝试用Laravel编写一个自定义验证规则,以确保逗号分隔列表中的每封电子邮件都不在禁止列表中。我已经有了一个不同的规则来验证逗号分隔列表中的每封电子邮件是否都是有效的电子邮件,所以我在这里不检查。
上面的代码运行良好,但我有两个问题:
- 我能做得更好吗
- 如何修改错误消息以包含不正确的电子邮件地址?我想让它说一些类似
"The email address test@example.com is on the suppression list and will not be used for sending"
的话
public function passes($attribute, $value)
{
$emails = explode(',', $value);
foreach ($emails as $email) {
$onSuppressionList = $this->suppressionListManager->find($email);
if ($onSuppressionList) {
return false;
}
}
return true;
}
public function message()
{
return 'The validation error message.';
}
像下面的一样声明名为$suppressionList
的属性
private $suppressionList=[];
然后更改通过
public function passes($attribute, $value)
{
$emails = explode(',', $value);
foreach ($emails as $email) {
$onSuppressionList = $this->suppressionListManager->find($email);
if ($onSuppressionList) {
$this->suppressionList[]=$email;
}
}
if(count($this->suppressionList)){
return false;
}
return true;
}
然后在自定义消息中
public function message()
{
$emails=implode(",",$this->onSuppressionList);
return 'The email address '.$emails.'is on the suppression list and will not be used for sending';
}
对于在邮件中附加电子邮件,您也可以使用sprintf