public function postAcceptedSign($md5) { $notif = CustomerOrder::where('sign_link', '=', $md5)->get(); Mail::send('emails.signed-notif', ['order_num' => $notif[0]->order_number], function ($m) { $m->to('mis@qdf-phils.com', '')->subject('Customer Order '.$notif[0]->order_number.' is now signed'); }); Session::flash('alert-success', 'Order Signed.'); return Redirect::to('home'); }
Я получаю Undefined variable: notif
которая указывает на это
Mail::send('emails.signed-notif', ['order_num' => $notif[0]->order_number], function ($m) { $m->to('mis@qdf-phils.com', '')->subject('Customer Order '.$notif[0]->order_number.' is now signed'); });
Почему я получаю неопределенную переменную в $notif[0]
где, как вы видите, моя переменная уже определена выше? Это потому, что начальный Mail::send
является отдельным блоком, который не может видеть другие переменные?
Блок закрытия (функция, отправляющая сообщение электронной почты) не имеет видимости области внешнего блока.
Итак, если вы хотите получить доступ к переменной изнутри закрытия, вы должны явно передать ее закрытию с использованием ключевого слова use ; как это:
Mail::send( 'emails.signed-notif', ['order_num' => $notif[0]->order_number], function($m) use ($notif) /* here you're passing the variable */ { $m->to('mis@qdf-phils.com', '')->subject('Customer Order'.$notif[0]->order_number.' is now signed'); } );
Для получения дополнительной информации об анонимных функциях и закрытиях проверьте здесь