Przekazywanie danych do zamknięcia w Laravel 4

108

Próbuję użyć klasy Mail w Laravel 4 i nie mogę przekazać zmiennych do obiektu $ m.

obiekt $ team zawiera dane, które pobrałem z bazy danych elokwentnie.

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

Z jakiegoś powodu pojawia się błąd, w którym obiekt $ team jest niedostępny. Przypuszczam, że ma to coś wspólnego z lunetą.

Jakieś pomysły ?

Benjamin Gonzalez
źródło
Dokładnie ten sam scenariusz dla mnie. Problem Mail :: send doprowadził mnie do szukania informacji o przekazywaniu zmiennych do domknięć, a następnie z powrotem do tego. Może trzeba coś dodać do dokumentacji laravel mailer w tej sprawie?
ShaunUK

Odpowiedzi:

231

Jeśli utworzyłeś wystąpienie $teamzmiennej poza funkcją, nie ma jej w zakresie funkcji. Użyj słowa kluczowego 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');
});

Uwaga: Używana funkcja to zamknięcie PHP (funkcja anonimowa). Nie jest wyłączna dla Laravel.

Błogosławieństwo
źródło
3
Dziękuję, nie zdawałem sobie sprawy, że możesz użyć tego słowa. Żałuję tylko, że nie mogłem się tego nauczyć wcześniej.
Douglas.Sesar,
2
Pracowałem również nad rozwiązaniem mojego problemu z Maillem :: queue w Laravel 5
DavidHyogo,
@DavidHyogo Ja też, cieszę się, że znalazłem ten post
atom2ueki