我正在控制器功能中遍历用户,并向每个用户发送电子邮件,但是有一个特殊用户有时会出现在列表中,因此不应该接收电子邮件。
我想输入if
语句来跳过该用户的循环迭代,但是当我添加return
,return 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));
}
答案 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