【问题标题】:Laravel-5.5: Session store not set on requestLaravel-5.5:未根据请求设置会话存储
【发布时间】:2018-01-06 05:42:30
【问题描述】:

我有简单的控制器:

代码收件箱控制器:

<?php

namespace App\Http\Controllers;

use App\User;
use App\Message;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class InboxController extends Controller
{
    public function compose(Request $request)
    {
        if($request->isMethod('post'))
        {

            $rules = [
                'to'      => 'required|email',
                'from'    => 'required|email',
                'subject' => 'required|max:10',
                'message' => 'required'
            ];

            $this->validate($request, $rules);

        }

        $array = array('messages'=>$this->user_messages(), 'count' => $this->count_messages());

        return view('compose', $array);
    }
}

如果我想验证所有路由中发送的数据会报错:

Session store not set on request.

如何在 Laravel 5.5 中根据请求设置会话以验证数据? 我必须验证 compose 路由中的数据

Routes
Route::group(['prefix' => 'inbox', 'middleware' => 'auth'], function(){
    Route::get('/', ['uses' => 'InboxController@index',])->name('inbox');
    Route::match(['get', 'post'], '/message/{id?}', ['uses'=>'InboxController@message'])->name('message');
    Route::match(['get', 'post'], '/compose', ['uses'=>'InboxController@compose'])->name('compose');
});

我的中间件组代码:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

【问题讨论】:

  • 向我们展示您的内核中间件组
  • 您可以在更新的问题@Sohel0415 中看到中间件组
  • 更改 return view('compose', compact('array')); 而不是 return view('compose', $array);
  • 如果您没有将web 组分配给您的路线,您就没有会话

标签: php laravel laravel-5.5


【解决方案1】:

你需要添加

 \Illuminate\Session\Middleware\StartSession::class

在kernal.php网络组的中间件中。

【讨论】:

  • 我已经添加了这个类,但我没有在我的路由中使用中间件['web']。你只使用中间件['auth']。错误在哪里?如何解决? @Saurabh Parekh
【解决方案2】:

如果您需要会话状态、CSRF 保护等,则需要使用 Web 中间件。

Route::group(['middleware' => ['web']], function () {
// your routes here
});

【讨论】:

    【解决方案3】:

    这是因为

    在 Kernal.php 中(位置 -> /app/Http )

    有两个数组$middleware$routeMiddleware

    不要在 $middleware 数组中创建别名(命名)。它必须在 $routeMiddleware 数组中创建。

    例如

    protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'checkLogin' => \App\Http\Middleware\CheckLogin::class,
        //here you have to add your middleware naming not in the $middleware array
    ];
    
        
    

    【讨论】:

      猜你喜欢
      • 2017-12-11
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 2023-03-22
      • 2020-08-24
      • 2017-03-13
      • 2017-09-30
      相关资源
      最近更新 更多