Laravel-扩展\Http\请求并使用会话

Laravel-扩展\Http\请求并使用会话,laravel,session,request,laravel-7,Laravel,Session,Request,Laravel 7,我已经扩展了illumb\Http\Request类,并将其传递给我的控制器 use Illuminate\Http\Request; class MyRequest extends Request { ... } 控制器 class MyController { // Doesnt work public function something(MyRequest $request) { var_dump($request->session())

我已经扩展了
illumb\Http\Request
类,并将其传递给我的控制器

use Illuminate\Http\Request;

class MyRequest extends Request
{
   ...
}
控制器

class MyController
{
    // Doesnt work
    public function something(MyRequest $request) {
        var_dump($request->session())
    }

   // Does work
    public function something(Illuminate\Http\Request $request) {
        var_dump($request->session())
    }

}
因此,当我试图获取会话
$request->session()
时,我会获取
运行时异常-会话存储未按请求设置。

我觉得这与我的定制请求没有运行中间件有关,但我不知道如何让它工作。帮助或指引正确的方向是非常值得的

提供更多的信息。我想做一个巫师。多个页面,其中一个页面的内容取决于前几页的选择。我将数据存储在会话中,在最后一页,我用它“填充”并清除当前用户的会话存储

因为它有很多行代码,而且会话Instance是按请求运行的,所以我认为将所有这些行隐藏在自定义请求和Controller中会很优雅,只需调用
$myRequest->storeInputs()

在这种情况下,我认为这是“最优雅的”,所以我更愿意以这种方式完成它,但如果有更好的解决方案,我也愿意接受不同的解决方案

概要:基本上,我应该在哪里隐藏所有存储和从sesison检索数据的行


解决方案:我实际上通过扩展FormRequest解决了这个问题,因为它是最适合我尝试做的事情的解决方案。然而,我接受了提供的答案,因为我相信这通常是更好的解决方案,如果不是针对这个非常特殊的情况,我会使用它。

经典的Laravel请求已经有了一系列您在自定义请求中没有捕捉到的设置。为了实现这一点,您应该设置一个中间件(在您的用例中可能是全局的),用您的中间件替换Laravel容器中的旧请求


所以你是说如果我做一些像$app->alias('request','MyRequest')这样的事情,它是可以修复的?;对我只是想添加几个方法。我想,如果可能的话,我更愿意扩展这个类?类似的东西$request=MyRequest::capture()$响应=$kernel->handle($request);或者我仍然完全离开?扩展FormRequest会是一个更好的解决方案吗?