为什么此方法无法访问会话?

时间:2015-06-15 15:42:38

标签: session laravel laravel-5

我有一个会话,其中包含我在控制器中通过多种方法访问的一些数据,没有任何问题。但是一种方法尤其存在问题。

我做了一个小预订系统。完成预订后,我打电话给我自己和客户发送电子邮件:

public function complete(Request $request)
    {
        $details = Session::get('details');

        // send emails: call sendConfirmationEmail(to address, using this view)
        $this->sendConfirmationEmail(env('EMAIL'), 'emails.ourconfirmation');
        $this->sendConfirmationEmail($details->booker_email, 'emails.bookerconfirmation');

        return view('booking/complete');
    }

private function sendConfirmationEmail($to,$view)
    {
        $from = env('OFFICE_EMAIL');
        $to_address = $to;

        $details = Session::get('details');
        $instance = Session::get('instance');

        Mail::queue($view, compact(['details','instance']), function($message) use ($to){
            $message->from(env('OFFICE_EMAIL'))
                    ->to($to)
                    ->subject('Thanks for booking');
        });
    }

首先,我在电子邮件视图中访问非对象时遇到错误。所以为了测试它,我只需将sendConfirmationEmail函数设置为返回$instance - 空白页面。然后我通过在complete()中注释函数调用并在那里返回$instance来测试它。没问题,这里有一个充满数据的闪亮会议。然后我尝试将$instancecomplete()传递到sendConfirmationEmail()并将其返回:再次,空白页。为什么不能sendConfirmationEmail看到'我的会议?!

1 个答案:

答案 0 :(得分:0)

据我所知,Sessions用于跨HTTP请求,而不是跨PHP的函数。您正在尝试使用Sessions作为全局变量。

您只需在details函数中捕获instancecomplete会话数据,然后将它们作为sendConfirmationEmail()函数的参数传递。