Mail::queue()でViewへのオブジェクト渡しでハマる

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'] }} さん

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中