Передача данных в закрытие в Laravel 4

108

Я пытаюсь использовать Mail Class в Laravel 4 и не могу передавать переменные объекту $ m.

объект $ team содержит данные, которые я извлек из БД с помощью красноречия.

Mail::send('emails.report', $data, function($m)
{
   $m->to($team->senior->email, $team->senior->first_name . ' '. $team->senior->last_name );
   $m->cc($team->junior->email, $team->junior->first_name . ' '. $team->junior->last_name );
   $m->subject('Monthly Report');
   $m->from('info@website.com', 'Sender');
});

По какой-то причине я получаю сообщение об ошибке, когда объект $ team недоступен. Я полагаю, это как-то связано с прицелом.

Любые идеи ?

Бенджамин Гонсалес
источник
Точно такой же сценарий для меня. Проблема Mail :: send привела к тому, что я начал искать пути передачи переменных в замыкания, а затем обратно к этому. Возможно, что-то нужно добавить в документацию почтовой программы laravel по этому поводу?
ShaunUK

Ответы:

231

Если вы создали экземпляр $teamпеременной вне функции, то он не входит в область видимости функции. Используйте ключевое слово use .

$team = Team::find($id);
Mail::send('emails.report', $data, function($m) use ($team)
{
   $m->to($team->senior->email, $team->senior->first_name . ' '. $team->senior->last_name );
   $m->cc($team->junior->email, $team->junior->first_name . ' '. $team->junior->last_name );
   $m->subject('Monthly Report');
   $m->from('info@website.com', 'Sender');
});

Примечание. Используемая функция является закрытием PHP (анонимная функция). Она не является эксклюзивной для Laravel.

Благословение
источник
3
Спасибо, я не понимал, что можно так использовать слово «использовать». Я только хотел бы узнать это раньше.
Douglas.Sesar
2
Также работал над решением моей проблемы с Maill :: queue в Laravel 5
DavidHyogo
@DavidHyogo Я тоже рад найти этот пост
atom2ueki