5

似乎不可能自己捕获错误,而不是获取 laravel 4 错误输出。

例如,如果我尝试:

    $databaseConfig = Config::get('database.connections.mysql');
    $connect = mysql_connect($databaseConfig['host'], $databaseConfig['username'], $databaseConfig['password']);
    if (!$connect)
    {
        return 'error';
    }

如果发生错误,我不会收到“错误”,insted laravel 会向我显示异常(在那个橙色站点上)。

如果您继续尝试

try {
    $pdo = DB::connection('mysql')->getPdo();
}
    catch(PDOException $exception) {
    return Response::make('Database error! ' . $exception->getCode());
}

有没有办法做到这一点?

4

4 回答 4

16

您提供的代码应该可以正常工作。如果我把它放在我的 routes.php 中,我会看到预期的错误字符串(没有橙色)。

Route::get('error', function() {
    try
    {
        $pdo = DB::connection('mysql')->getPdo();
    }
    catch(PDOException $exception)
    {
        return Response::make('Database error! ' . $exception->getCode());
    }
    return 'all fine';
});

这里可能发生的是,您的 PDOException 没有被捕获。尝试向 PDOException 添加一个反斜杠,这样您就可以确定它是在根目录中定义的,而不是在当前命名空间中定义的。

catch(\PDOException $exception)

此外,尝试直接从 routes.php 文件中运行代码,看看它的行为是否相同。

于 2013-06-17T17:55:05.133 回答
2

看看这个页面: http: //laravel.com/docs/errors

快速示例:

App::error(function(PDOException $e)
{
    Log::error($exception);

    return Response::make('Database error! ' . $exception->getCode());
});
于 2013-06-16T11:04:26.707 回答
1
App::error(function(Exception $exception) {
echo '<pre>';
echo 'MESSAGE :: ';
    print_r($exception->getMessage());
echo '<br> CODE ::';
    print_r($exception->getCode());
echo '<br> FILE NAME ::';
    print_r($exception->getFile());
echo '<br> LINE NUMBER ::';
    print_r($exception->getLine());
die();// if you want than only
});

将此代码放入您的路由文件中...
您将收到带有文件名和错误行的错误消息,
所有大多数错误都将被涵盖。

于 2014-05-26T07:13:12.677 回答
0

我知道我的回答已经很晚了。但是在参考了上面的答案之后,我还没有解决这个问题。

看了这个网站后(这里解释得很清楚):https ://stackify.com/php-try-catch-php-exception-tutorial/

这是一个额外的答案:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
于 2019-05-21T03:52:18.480 回答