Laravel abort()无法在内部尝试捕获

时间:2019-02-03 14:30:18

标签: laravel

abort(403); <-- works fine, will display laravel abort page

try{
    $rows = DB::.......

    if ( !$Rows ) {
        abort(403);<-- this will become exception
    } else {

    }
} catch (Exception $e) {

}

当用户请求时我有一个页面,如果没有行我想使用laravel abort();终止页面。

无论如何,我都使用try catch包装我的代码,它将变成catch错误并导致laravel abort()无法正常工作。

任何人如何解决此问题?

2 个答案:

答案 0 :(得分:0)

尝试此代码

      try{
        abort(403);
    } catch (\Exception $e) {

        if($e->getStatusCode()==403)
            abort(403);
    }

答案 1 :(得分:0)

\Exception是所有php异常的基类。因此,当您在try .. catch块中捕获\Exception时,实际上就是在捕获所有异常。

当您中止(403)时,laravel在内部抛出带有状态代码403的HttpException

如果您在laravel中看到,HttpException扩展了PHP的\RuntimeException,而实际上,它扩展了\Exception类。

解决方案是捕获特定的异常,而不是捕获\Exception。例如,如果您担心mysql连接,则可以捕获PDOException。最好要具体说明要捕获的异常。

<?php 

try{
    $rows = DB::someaction()...;

    if (!$rows) {
        abort(403);
    }
    // Do stuff with $rows

}catch (PDOException $e) {
    // take action for specific exception
}