更改 Laravel 中自定义验证规则的验证消息

时间:2021-06-14 12:18:06

标签: laravel validation rules

我正在尝试在 Laravel 中编写自定义验证规则,以确保逗号分隔列表中的每封电子邮件都不在抑制列表中。我已经有一个不同的规则来验证逗号分隔列表中的每封电子邮件是否都是有效的电子邮件,所以我不在这里检查。

上面的代码工作正常,但我有两个问题:

  1. 我能做得更好吗?
  2. 如何修改错误消息以包含不正确的电子邮件地址?我想让它说 "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.';
}

1 个答案:

答案 0 :(得分:1)

声明名为 $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