为Mail::send()方法定义电子邮件地址

8

如果我理解不够深刻,因为我是 Laravel 的新手,请谅解。当我将闭包函数传递给 Mail::send() 方法来定义邮件的接收方时,如果邮件地址在全局范围内可用,则可以正常工作,像这样:

Mail::send('frontend.emails.default', $data, function($message) 
{
    $message->to(Input::get('email'))->subject('Hi');
});

但是我怎样能够传递一个值,使它局限于调用方法的范围内呢? 例如:
$user = User::find($id);

Mail::send('frontend.emails.default', $data, function($message) 
{
    $message->to($user->email)->subject('Hi');
});

我尝试将它添加到$data数组中,但该数组用于视图中,在回调函数中不可用。

谢谢您的帮助。

1个回答

47

PHP中有一个很少记录的功能,可以允许从当前作用域将变量传递到闭包中。简而言之,您需要使用use ($user)...

$user = User::find($id);

Mail::send('frontend.emails.default', $data, function($message) use ($user)
{
    $message->to($user->email)->subject('Hi');
});

你所说的 use ($var) 是什么黑魔法?!哇,感谢Phil!这个看似微不足道的特性/答案让我的一天变得轻松了很多。我会在文档等方面进行一些挖掘,看看 use ($var) 在幕后实际上是做什么的。说实话,除了与命名空间相关的 use \Namespace\Class 之外,我从未使用过它。再次感谢。 - Erik Aybar
@ErikTheDeveloper,你可以在匿名函数文档中找到关于use的一些信息。 - Phill Sparks
1
@darronz,不知道你遇到了什么问题,但空格并不重要:http://3v4l.org/6anJp - Nicholas Ruunu
@nicholas-ruunu 你说得对。这与空格无关。我已经删除了我的评论,因为它可能会误导其他人。 - darronz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接