Mail::send() と Mail::queue() ではViewにオブジェクトを渡した時の挙動が違います。
Mail::queue() でメールを送信したら、”Trying to get property of non-object” というエラーが出てハマってしまいました。
Mail::send() を使ったメールの送信
$user = User::where('email', '=', $request->input('email'))->firstOrFail(); Mail::send('emails.welcome', compact('user'), function($message) { $message->to('foo@example.com', 'John Smith')->subject('Welcome!'); });
$userオブジェクトを、ビューに渡しています。
{{-- resources/views/emails/welcome.blade.php --}} ようこそ、{{ $user->name }} さん
ビュー内では $user をオブジェクトとして参照し、name を取得しています。
このコードは上手く動きます。
Mail::queue() を使ったメールの送信
Mail::send() を Mail::queue() に変更してみます。
$user = User::where('email', '=', $request->input('email'))->firstOrFail(); Mail::queue('emails.welcome', compact('user'), function($message) { $message->to('foo@example.com', 'John Smith')->subject('Welcome!'); });
すると、ビューをレンダリングする所で、以下の例外エラーが発生します。
Trying to get property of non-object
Mail::queue()でビューにオブジェクトを渡した時は、ビューにはオブジェクトではなく配列として渡されます。以下のようにビュー内で、$userを配列として参照すれば、解決します。
{{-- resources/views/emails/welcome.blade.php --}} ようこそ、{{ $user['name'] }} さん