【发布时间】:2020-09-21 04:17:32
【问题描述】:
我已经扩展了 Illuminate\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() 时,我得到了 RuntimeException - Session store not set on request.
我觉得这与未根据我的自定义请求运行中间件有关,但我不知道如何使其工作。非常感谢帮助或指出正确的方向。
提供更多信息。我正在尝试制作一个向导。几页,其中一页的内容取决于前一页的选择。我将数据存储在会话中,并在最后一页上“填充”它并清除当前用户的会话存储。
因为它有很多代码行,并且由于会话实例根据请求而存在,但在自定义请求中隐藏所有这些行并在控制器中简单地调用 $myRequest->storeInputs() 会很优雅
在这种特殊情况下,这在我看来是“最优雅的”,所以我更愿意以这种方式完成它,但如果有更好的方法,我也愿意接受不同的解决方案。
总结:基本上我应该在哪里隐藏所有那些从 sesison 存储和检索数据的行?
解决方案:我实际上是通过扩展 FormRequest 解决了这个问题,因为它是最适合我尝试做的事情的解决方案。但是我接受了提供的答案,因为我相信它通常是更好的解决方案,如果不是针对这种非常特殊的情况,我会使用它。
【问题讨论】:
-
所以你说如果我做类似 $app->alias('request', 'MyRequest') 的事情是可以解决的?;
-
是的。只是想添加几个方法。
-
我虽然是这样,但如果可能的话,我宁愿扩展课程?
-
那种东西? $request =MyRequest::capture(); $response = $kernel->handle($request);或者我还没有完全离开?
-
改为扩展 FormRequest 会是更好的解决方案吗?
标签: laravel session request laravel-7