Passer des données à une fermeture dans Laravel 4

108

J'essaie d'utiliser la classe Mail dans Laravel 4, et je ne suis pas en mesure de passer des variables à l'objet $ m.

l'objet $ team contient des données que j'ai extraites de la base de données avec éloquence.

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');
});

Pour une raison quelconque, j'obtiens une erreur où $ team object n'est pas disponible. Je suppose que cela a quelque chose à voir avec la portée.

Des idées ?

Benjamin Gonzalez
la source
Exactement le même scénario pour moi. Le problème Mail :: send m'a amené à rechercher comment passer des variables aux fermetures, puis à revenir à cela. Peut-être qu'un signe doit être ajouté à la documentation du mailer laravel à ce sujet?
ShaunUK

Réponses:

231

Si vous avez instancié la $teamvariable en dehors de la fonction, elle n'est pas dans la portée des fonctions. Utilisez le mot-clé 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');
});

Remarque: La fonction utilisée est une fermeture PHP (fonction anonyme) Elle n'est pas exclusive à Laravel.

Bénédiction
la source
3
Merci, je ne savais pas que vous pouviez utiliser «utiliser» comme ça. J'aurais seulement aimé pouvoir l'apprendre plus tôt.
Douglas.Sesar
2
A également travaillé pour résoudre mon problème avec Maill :: queue dans Laravel 5
DavidHyogo
@DavidHyogo Moi aussi, heureux de trouver ce post
atom2ueki