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('info@website.com', '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 ?


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('info@website.com', 'Sender');
});

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.