Laravel根据条件跳过发送邮件

时间:2019-07-17 09:36:08

标签: laravel email model-view-controller laravel-5.7

我正在控制器功能中遍历用户,并向每个用户发送电子邮件,但是有一个特殊用户有时会出现在列表中,因此不应该接收电子邮件。

我想输入if语句来跳过该用户的循环迭代,但是当我添加returnreturn null等,或者在我的{ {1}}在可发送的类构建函数中得到

if/else

我可以在控制器中添加条件邮件,我敢肯定,这是可以的,除了我在控制器的全部负载中都包含这些电子邮件之外,因此会多次编写条件邮件。如果我可以将它放到一个中央位置(而我只知道可邮寄的类),则可以编写一次。

编辑:已请求将循环代码添加到下面,但这只是控制器中许多电子邮件循环之一,因此请不要在其中添加条件。

InvalidArgumentException
Invalid view.

这是我的可邮寄类的构建函数(如果可能的话,我想在其中添加条件):

        $objNotification = new \stdClass();
        $objNotification->message_body = "stuff";
        $user_ids = DB::select('select user_id from users_to_things where thing_id = ?', [$thing->id]);
        foreach($user_ids as $user_id) {
            $user = User::find($user_id->user_id);
            $objNotification->receiver = $user->name;
            Mail::to($user->email)->send(new NotificationEmail($objNotification));
        }

1 个答案:

答案 0 :(得分:0)

您想要的将与“单一责任原则”相冲突。该类仅假定发送电子邮件。

您的可邮寄类中的build()返回错误,原因是它期望您为邮件返回一条消息(主题,正文,模板或view等)。

1。)也许您可以根据情况断言虚假邮件;

2。)在电子邮件类中创建一个函数

public function needSend($mail)
{
    ... loads of conditions
    return (condition) ? true : false;
}

然后

if ($mail->needSend($mail)) {
    \Mail::send($mail);
}

3。)或者最简单但最肮脏的方法是将条件放入Controller循环中的for

foreach($user_ids as $user_id) {
   $user = User::find($user_id->user_id);
   $objNotification->receiver = $user->name;
   if(condition == true) continue;
   Mail::to($user->email)->send(new NotificationEmail($objNotification));
}

您也可以在github上阅读此线程。 https://github.com/laravel/ideas/issues/519