如何单独呈现与Http相关的异常,然后在Laravel中的公共位置呈现所有其他异常

时间:2017-03-28 13:03:11

标签: php laravel exception

我在Laravel中实现异常。我很感激Laravel在一个地方处理所有例外情况!

Laravel还允许我们根据状态创建一些常见错误的登录页面,例如要抓住404,请在404.blade.php上创建views/errors。现在,我想了解一些与http相关的常见错误,例如404,401,403和405使它们自动重定向到其命名视图,然后对于所有其他错误,我想将它们重定向到常见错误登录页面。

问题是:如何让Laravel知道它应该在调用其他非http相关错误之前自动处理“命名”错误?

这是我到目前为止所做的,但例外似乎不是HttpException的实例。我怎么能抓住它们呢?

// app/Exceptions/Handler.php
public function render($request, Exception $e)
{
    // I want these ones to be picked and routed to the relevant page (401, 403, 404, 405)
    if($e instanceof HttpException && $e->getStatusCode()== 404)
    {
        return response()->view('errors.404');
    }
    elseif($e instanceof HttpException && $e->getStatusCode()== 405)
    {
        return response()->view('errors.405');
    }
    elseif($e instanceof HttpException && $e->getStatusCode()== 401)
    {
        return $this->unauthenticated($request,$e);
    }
    elseif($e instanceof HttpException && $e->getStatusCode()== 403)
    {
        return response()->view('errors.403');
    }
     elseif($e instanceof ModelNotFoundException)
    {
        return response()->view('error.model-not-found');
    }

    // // then the rest can go to a common page

     return response()->view('errors.caught-errors', [
        'error' => 'Error encountered.',
        'description' => 'Brief public-friendly description.'
    ]);
    // Laravel default renderer
    //return parent::render($request, $e);
}

0 个答案:

没有答案