2015-06-15 54 views
0

我有一個包含一些數據的會話,可以在我的控制器中通過幾種方法訪問,而不會出現任何問題。但是有一種方法特別有問題。爲什麼這個方法不能訪問會話?

我已經做了一個小預訂系統。在預訂完成後,我調用一個函數來一封電子郵件發送給自己和客戶:

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'看不到'我的會話?

+0

我假設你看到一個500錯誤頁面;網站的laravel日誌或錯誤日誌中的錯誤是什麼?我認爲這與參數有關,但如果沒有確切的錯誤日誌,則無法確定 – Luceos

回答

0

據我所知,Sessions是跨越HTTP請求使用的,而不是跨越PHP中的函數。你正在嘗試使用Sessions作爲全局變量。

你可以簡單地捕捉detailsinstance會話數據在complete功能,然後一起傳遞他們作爲sendConfirmationEmail()功能參數。

相關問題