2013-05-29 4 views
8

Извините, если мне не хватает чего-то здесь, поскольку я новичок в Laravel, но когда я отправляю закрытие метода Mail :: send() для определения почты получатель, он отлично работает, если адрес электронной почты доступен глобальный масштаб, например:Определение адреса электронной почты для метода 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'); 
}); 

Я пытался добавить его в массив $ данных, но это используется в целях и не доступны в функции обратного вызова.

Благодарим за помощь.

ответ

46

В PHP есть небольшая задокументированная функция, которая позволяет передавать переменные из текущей области в закрытие. Короче говоря, вам необходимо use ($user) ...

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

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

Awesome - thanks Phill. –

+0

Какая черная магия 'use ($ var)' это вы говорите ?! ... Вау. Спасибо, что Фил! По-видимому, незначительная особенность/ответ, который просто сделал мой день намного проще. Я собираюсь сделать некоторые копания вокруг docs/etc, чтобы увидеть, что 'use ($ var)' фактически делает за кулисами. Честно говоря, я никогда не использовал его за пределами пространства имен, связанных 'use \ Namespace \ Class' Еще раз спасибо. – ErikTheDeveloper

+0

@ErikTheDeveloper вы можете найти небольшую информацию о 'use' в документации [Анонимная функция] (http://www.php.net/manual/en/functions.anonymous.php). –

Смежные вопросы