Pasando datos a un cierre en Laravel 4

108

Estoy tratando de usar la clase de correo en Laravel 4 y no puedo pasar variables al objeto $ m.

el objeto $ team contiene datos que obtuve de la base de datos con elocuente.

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 alguna razón, aparece un error en el que el objeto $ team no está disponible. Supongo que tiene algo que ver con el alcance.

Algunas ideas ?

Benjamín González
fuente
Exactamente el mismo escenario para mí. El problema Mail :: send me llevó a buscar cómo pasar variables a los cierres y luego volver a esto. ¿Quizás un signo de algo debe agregarse a los documentos de correo de laravel sobre esto?
ShaunUK

Respuestas:

231

Si creó una instancia de la $teamvariable fuera de la función, entonces no está en el alcance de las funciones. Utilice la palabra clave 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: La función que se utiliza es un cierre de PHP (función anónima) No es exclusiva de Laravel.

Bendición
fuente
3
Gracias, no me di cuenta de que podrías usar 'usar' así. Ojalá hubiera podido aprender esto antes.
Douglas.Sesar
2
También funcionó para resolver mi problema con Maill :: queue en Laravel 5
DavidHyogo
@DavidHyogo Yo también, me alegro de encontrar esta publicación
atom2ueki