我正在使用Laravel 5.3并尝试处理app\Exceptions\Handler.php
内render()
内的所有常见异常。我想保存会话var并自己在控制器中检查它。
例如:对于TokenMismatchException
,它的工作原理如下:
if($excp_class == 'Illuminate\Session\TokenMismatchException'){
return redirect($request->fullUrl())->with('TokenError', 'CSRF');
}
然而,对于NotFoundHttpException
,我似乎无法让Session保存一个值。
if(stristr($excp_class, 'NotFoundHttpException')!=false)
{
//return redirect()->route('XYZRoute')->with('TokenError', 'NotFound'); //Also tried `withError`
\Request::session()->put('TokenError', 'NotFound'); //not working
\Request::session()->save();
return back();
}
我在这里缺少什么?
答案 0 :(得分:2)
由于Laravel没有找到路由(NotFoundHttpException),您的请求没有通过中间件\ Illuminate \ Session \ Middleware \ StartSession。 您的请求当时没有会话。
如果您希望所有请求都有会话,则必须在内核的$ middleware中添加\ Illuminate \ Session \ Middleware \ StartSession :: class:
namespace App\Http;
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,
];
...
}
我没有测试过,但我希望它可以帮助你。