Laravel 5.3 - 处理NotFoundHttpException

时间:2016-10-06 23:32:30

标签: php exception laravel-5.3

我正在使用Laravel 5.3并尝试处理app\Exceptions\Handler.phprender()内的所有常见异常。我想保存会话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();
}

我在这里缺少什么?

1 个答案:

答案 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,
    ];
...
}

我没有测试过,但我希望它可以帮助你。