为什么这个异常一直传播到App :: fatal?

时间:2014-04-16 13:04:57

标签: php laravel laravel-4 eloquent

在这个片段中,问题是我正在保存$ model(感谢@Lucas Brito)。 我不明白的是:

  1. 为什么在$ model-> save()
  2. 附近的try / catch中没有捕获异常
  3. 为什么App :: fatal中的$ exception变量为空
  4. 我怎样才能显示更明确的错误
  5. 每次拨打$model->save();

    $new = new System();
    $new->imcid = $imcid;
    $new->name = $name;
    $new->validate();
    Log::info('At update');
    try{
        $model->save();
    }catch(\Exception $e){
        Log::info('Exception thrown');
    }
    Log::info('Done');
    

    在日志中,我可以看到“更新时”,但没有“抛出异常”或“完成” 我得到在routes.php上定义的消息

    App::fatal(function($exception){
        return Response::json(array(
            'message' => 'damn...',
            'exception' => $exception
        ), 500);
    });
    

3 个答案:

答案 0 :(得分:1)

而不是代码:

try{
    $model->save();
}catch(\Exception $e){
    Log::info('Exception thrown');
}

试试这个:

if(!$model->save()) {
    throw new Exception("Couldn't save!");
}
else {
    // success
}

默认情况下,app/start/global.php中有(如果没有)异常处理程序,如下所示:

App::error(function(Exception $exception, $code)
{
    Log::error($exception);
    //Log::error($exception->getMessage());
});

您也可以通过扩展基类Exception类来创建自定义异常类,并且可以改为抛出该自定义异常。

更新:您正在保存$model->save();而不是$new->save();

  

为什么没有抓到我的捕获

这是因为发生了致命错误,并且您有一个致命错误的注册处理程序,如下面给出的错误和错误由该处理程序捕获:

App::fatal(function($exception){
    //...
    return Response::json(...);
});

因此,一旦从任何错误处理程序发送响应,它就会停止传播到up,刚刚完成传播并发送响应。

答案 1 :(得分:1)

我认为你正试图保存错误的变量。不应该保存$ new?

我是这样做的:

$reg = new Area;

$reg->name          = $name;
$reg->created_at    = time();
$reg->created_by    = Auth::user()->id;

$reg->save();

答案 2 :(得分:0)

例外情况一直在升级致死,因为我错过了Log中的\。

所以:

  1. 它是catch中的代码,它抛出了错误 一直到App:致命

  2. 我无法再复制一遍,但写道 例外:

    \Illuminate\Support\Facades\Log::error('message'.$exception);
    
    App中的

    在我死的时候致命 在不同情况下进行调试。

  3. 使用App :: fatal。

  4. 中的上述行