2016-03-10 55 views
0

我有2個控制器userControllerajaxController會話示出了在其他控制器laravel空4

我有2個會話中userController這樣,

public function getCheckout() 
{ 
    Session::put('vouchers', array()); 
    Session::put('finalcart', array()); 
} 

和我使用在voucherssession這樣puting多個值ajax,然後使用ajax調用calculateprice方法。

public function checkvoucher() 
{ 
    Session::put('vouchers',$vouchers); 
} 

現在,當我試圖在ajaxController檢索會話這樣

public static function calculateprice() 
{ 
    $finalcart=Session::get('finalcart'); // returns with values that i pushed in another controller. 

    $finalcart=Session::get('vouchers'); // returns empty. 
} 

首先我打電話getCheckout方法隨後checkvoucher,當我打印該會議checkvoucher然後我得到的是正確的。然後,我打電話給calculateprice,它返回空會話。即使在將新的價值投入會議之後,它也只是採用舊的會話價值。我不知道我犯了什麼錯誤。

+0

您能否在函數checkvoucher()中的Session :: put('vouchers',$ vouchers)行之後獲得名爲'vouchers'的會話的值並共享輸出? – Vagabond

回答

0

我認爲L5.2實際上存在一個問題,因爲如果您嘗試訪問基於會話的值(例如登錄表單等),任何自定義錯誤頁面都會顯示此錯誤。

我認爲這是因爲異常沒有通過網絡中間件組?

要解決和防止「未設置會話存儲要求」的出現在我的自定義HTTP錯誤頁面我感動:

\Illuminate\Session\Middleware\StartSession::class, 

從網絡組到全球中間件組中的kernel.php文件,該文件解決了這個問題。

所以我kernel.php文件現在看起來是這樣的:

namespace App\Http; 

use Illuminate\Foundation\Http\Kernel as HttpKernel; 

class Kernel extends HttpKernel 
{ 
    /** 
    * The application's global HTTP middleware stack. 
    * 
    * These middleware are run during every request to your application. 
    * 
    * @var array 
    */ 
    protected $middleware = [ 
     \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
     \Illuminate\Session\Middleware\StartSession::class, 
    ]; 

    /** 
    * The application's route middleware groups. 
    * 
    * @var array 
    */ 
    protected $middlewareGroups = [ 

     'web' => [ 
      \App\Http\Middleware\EncryptCookies::class, 
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
      \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
      \App\Http\Middleware\VerifyCsrfToken::class, 
     ], 

     'api' => [ 
      'throttle:60,1', 
     ], 
    ]; 

    /** 
    * The application's route middleware. 
    * 
    * These middleware may be assigned to groups or used individually. 
    * 
    * @var array 
    */ 
    protected $routeMiddleware = [ 
     'auth' => \App\Http\Middleware\Authenticate::class, 
     'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
     'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
     'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 
    ]; 
} 

如果有任何更好的解決方案,我會很高興聽到他們作爲我對如何實現中間件的抓地力是有點脆弱的!

+0

您不應將會話中間件添加到全局堆棧,因爲它也會啓用API的會話。你不需要API路由中的會話。將中間件添加到「web」堆棧會更好。 – Hkan

+0

我已經將網絡添加爲中間件,但它不起作用 –

+0

可能因爲您沒有爲您的路線組添加「網絡」。 – Hkan