Laravel 4のクロージャーにデータを渡す


108

Laravel 4でメールクラスを使用しようとしていますが、$ mオブジェクトに変数を渡すことができません。

$ teamオブジェクトには、DBから雄弁に取得したデータが含まれています。

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

何らかの理由で、$ teamオブジェクトが使用できないというエラーが発生します。スコープと関係があると思います。

何か案は ?


私にとってはまったく同じシナリオです。Mail :: sendの問題により、変数をクロージャーに渡してからこれに戻る方法を検索するようになりました。おそらく、これについてのlaravelメーラーのドキュメントに何かを追加する必要がある兆候でしょうか?
ShaunUK、2015年

回答:


231

$team関数の外で変数をインスタンス化した場合、その変数は関数スコープ内にありません。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');
});

注:使用されている関数は、PHPクロージャー(無名関数)です。これは、Laravel専用ではありません。


3
ありがとう、そのような「使用」ができるとは思いもしませんでした。もっと早く学べたならいいのに。
Douglas.Sesar 14

2
Laravel 5のMaill :: queueでの私の問題を解決するためにも働いた
DavidHyogo

@DavidHyogo私も、この投稿を見つけてうれしい
atom2ueki
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.