【问题标题】:Yii2 in Third Party systems for ActiveRecord. How to deal with exceptionsActiveRecord 的第三方系统中的 Yii2。如何处理异常
【发布时间】:2017-09-14 03:13:17
【问题描述】:

我在我的框架中使用 Yii2,因为我喜欢 ActiveRecord 和 QueryBuilder。 Yii2 Official docs 描述如何使用它。

它可以工作,但是 Yii2 可以控制 ErrorHandler.php 中的 PHP 异常和警告

/**
 * Register this error handler
 */
public function register()
{
    ini_set('display_errors', false);
    set_exception_handler([$this, 'handleException']);
    if (defined('HHVM_VERSION')) {
        set_error_handler([$this, 'handleHhvmError']);
    } else {
        set_error_handler([$this, 'handleError']);
    }
    if ($this->memoryReserveSize > 0) {
        $this->_memoryReserve = str_repeat('x', $this->memoryReserveSize);
    }
    register_shutdown_function([$this, 'handleFatalError']);
}

我不知道如何处理它。

例如,我有来自 Yii 的 DBException。如果我设置自己的set_exception_handler,它将包含非常差的异常信息:只有代码和消息。如果没有准备好的查询、查询参数等,调试起来会很困难。

如果我使用 Yii2 的异常处理程序 - 我必须用 Yii2 异常重写我的所有框架。那不好,我不太喜欢 Yii2 字母和异常模板。 Yii2 所需要的只是与 DB 合作。

您有什么想法可以解决这种情况吗?

【问题讨论】:

  • 我认为您误解了它的工作方式。 Yii 异常不包含比默认 PHP 异常更多的信息,Yii 错误处理程序处理每个异常,因此您不必重写代码。 Yii 2 中的 SQL 查询由 profiler 记录。
  • 我不太确定你想在这里实现什么。你想保留默认的 php 错误处理程序还是什么?

标签: php activerecord yii exception-handling yii2


【解决方案1】:

我意识到,Yii 的数据库异常包含所有关于请求和错误的信息。此外,该异常还有一些其他信息的附加方法。这足以让我的框架像往常一样控制所有异常和错误。

所以我将所有处理程序再次重写为我的处理程序

spl_autoload_register(array("MyClass", 'autoload'));
set_exception_handler(['MyClass','exceptionHandler']);
set_error_handler(['MyClass','errorHandler']);

并收集所有有用信息到错误body

$body .= "Error: " . $e->getMessage() . PHP_EOL;
$body .= "File: " . $e->getFile() . ":" . $e->getLine() . PHP_EOL;
$body .= "Trace:" .$e->getTraceAsString() . PHP_EOL;
$prev = $e->getPrevious();
if ($prev) {
    $body .= "Next To: ";
    $body .= get_class($prev)." ".PHP_EOL;
    $body .= $prev->getMessage();
}
if ($e instanceof yii\db\Exception) {
    $body .= "Additional Info: " . (print_r($e->errorInfo, true));
}

【讨论】:

    猜你喜欢
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多