2015-12-24 23 views
0

我試圖到Laravel 4.1應用程序升級到5.1 WAMP,並得到這個錯誤:Laravel 5.1 - 會話店沒有設置要求

RuntimeException in Request.php line 775: Session store not set on request.

in D:\wamp\www\laravel-5.1\vendor\laravel\framework\src\Illuminate\Http\Request.php line 775 at Request->session() in D:\wamp\www\laravel-5.1\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php line 137 at VerifyCsrfToken->addCookieToResponse(object(Request), object(Response)) in VerifyCsrfToken.php line 64 at VerifyCsrfToken->handle(object(Request), object(Closure)) at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 30 at Pipeline->Illuminate\Routing{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96 at ControllerDispatcher->callWithinStack(object(BrowseController), object(Route), object(Request), 'getBrowseRecent') in ControllerDispatcher.php line 54 at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\BrowseController', 'getBrowseRecent') in Route.php line 174 at Route->runController(object(Request)) in Route.php line 140 at Route->run(object(Request)) in Router.php line 703 at Router->Illuminate\Routing{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in ViewThrottleMiddleware.php line 55 at ViewThrottleMiddleware->handle(object(Request), object(Closure)) at call_user_func_array(array(object(ViewThrottleMiddleware), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 30 at Pipeline->Illuminate\Routing{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 at Pipeline->then(object(Closure)) in Router.php line 705 at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 678 at Router->dispatchToRoute(object(Request)) in Router.php line 654 at Router->dispatch(object(Request)) in Kernel.php line 246 at Kernel->Illuminate\Foundation\Http{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in CheckForMaintenanceMode.php line 44 at CheckForMaintenanceMode->handle(object(Request), object(Closure)) at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 at Pipeline->then(object(Closure)) in Kernel.php line 132 at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99 at Kernel->handle(object(Request)) in index.php line 54

storage文件夾是可寫的,並且使用的會話驅動程序file。我搜索了整個項目的session(),但發現它沒有。我能做些什麼來糾正這個錯誤?謝謝!

session.php如下:

<?php 

return [ 
    'driver' => env('SESSION_DRIVER', 'file'), 
    'lifetime' => 120, 
    'expire_on_close' => false, 
    'encrypt' => false, 
    'files' => storage_path('framework/sessions'), 
    'connection' => null, 
    'table' => 'sessions', 
    'lottery' => [2, 100], 
    'cookie' => 'laravel_session', 
    'path' => '/', 
    'domain' => null, 
    'secure' => false, 

]; 

編輯1:我發現這個問題是在控制器中。有一條線:

$this->middleware('csrf', [ 'on' => 'post' ]); 

我評論它,它的工作。但我沒有弄清楚爲什麼它導致了問題呢。

+0

什麼時候出現這個錯誤? –

+0

請顯示'sessions.php'配置。並且,您是否正在遵循文檔升級過程? –

+0

我檢查了升級文檔,並嘗試從App \ Http \ Kernel中刪除'App \ Http \ Middleware \ VerifyCsrfToken',但它沒有幫助。 csrf仍然在'php artisan route:list'中顯示爲中間件。這是原因嗎? –

回答

0

看@Cas布勒姆在這裏他的回答幫我出令人驚訝:

Laravel - Session store not set on request

這就是爲什麼它不是爲我工作。因爲你正在使用一個期望匹配CSRF令牌的會話(是我最好的猜測,我是Laravel自己的新手)。

此外,如果你去app-> http-> middleware-> VerifyCsrfToken這是你可以添加路由到數組將不檢查CSRF驗證。這加上Cas Bloem的修復(在routes.php的不同部分放置路由)解決了我的問題。我現在只是在localhost上開發/學習,但需要稍後再實施。

希望這有助於/清除的東西!