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.