Passando dados para um fechamento no Laravel 4

108

Estou tentando usar a Mail Class no Laravel 4, e não consigo passar variáveis ​​para o objeto $ m.

o objeto $ team contém dados que peguei do banco de dados com eloquent.

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('[email protected]', 'Sender');
});

Por algum motivo, recebo um erro em que $ team object não está disponível. Suponho que tenha algo a ver com o escopo.

Alguma ideia ?

Benjamin Gonzalez
fonte
Exatamente o mesmo cenário para mim. O problema Mail :: send me levou a pesquisar sobre como passar variáveis ​​para encerramentos e depois voltar a isso. Talvez um sinal de que algo precisa ser adicionado aos documentos do laravel mailer sobre isso?
ShaunUK

Respostas:

231

Se você instanciou a $teamvariável fora da função, ela não está no escopo das funções. Use a palavra-chave 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('[email protected]', 'Sender');
});

Nota: A função que está sendo usada é um PHP Closure (função anônima) que não é exclusiva do Laravel.

Bênção
fonte
3
Obrigado, não sabia que você poderia usar 'usar' assim. Eu só gostaria de ter aprendido isso antes.
Douglas.Sesar
2
Também trabalhei para resolver meu problema com Maill :: queue no Laravel 5
DavidHyogo
@DavidHyogo Eu também, fico feliz em encontrar este post
atom2ueki