【问题标题】:How I can override Slim's version 2 default error handling function如何覆盖 Slim 的第 2 版默认错误处理功能
【发布时间】:2019-09-23 16:02:14
【问题描述】:

如何覆盖 Slim 的第 2 版默认错误处理?我不希望我的应用程序在每次收到警告消息时崩溃。基本上我想从 \Slim\Slim 类中覆盖函数 handleErrors()。

我研究了如何覆盖此行为,但因为它被称为:

set_error_handler(array('\Slim\Slim', 'handleErrors')); 在 Sim 的 run() 方法中,我必须自己编辑 Slim 源代码。我将上面的内容更改为:set_error_handler(array(get_class($this), 'handleErrors')); 然后我用不同的行为扩展了 Slim 的 handleErrors() 并实例化了我的自定义类而不是 Slim。它工作正常但我不想触及 Slim 的核心课程。 代码仅供参考

public static function handleErrors($errno, $errstr = '', $errfile = '', $errline = '')
{
    if (error_reporting() & $errno) {
        //Custom Block start here
        $search = 'Use of undefined constant';
        if(preg_match("/{$search}/i", $errstr)) {
            return true; //If undefined constant warning came will not throw exception
        }
        //Custom Block stop here
        throw new \ErrorException($errstr, $errno, 0, $errfile, $errline);
    }

    return true;
}

请帮忙改写handleErrors()的正确方法

【问题讨论】:

  • 这应该是一个配置设置,设置dev和prod的错误级别等等
  • 我不希望 Slim::handleErrors() 在出现特定警告时抛出异常。
  • 你也可以使用 php ini 设置来委托错误/警告显示,但我认为 Slim 应该已经有这个东西的配置参数
  • @NikosM。我了解通过不同方式抑制错误和警告的方法。但在我的情况下,我不想抑制所有我想在未定义常量等情况下抑制的警告。我将检查 Slim::handleErrors() 然后抛出异常。

标签: php api slim slim-2


【解决方案1】:

我在 index.php 中通过以下方式处理它

// Prepare the Slim application container
$container = new Container();

// Set up error handlers
$container['errorHandler'] = function () {
    return new ErrorHandler();
};
$container['phpErrorHandler'] = function () {
    return new ErrorHandler();
};
$container['notAllowedHandler'] = function () {
    return new NotAllowedHandler();
};
$container['notFoundHandler'] = function () {
    return new NotFoundHandler();
};
// Set up the container
$app = new App($container);

$app->run();

也可以通过这种方式覆盖默认的 slim 请求和响应

【讨论】:

  • 我使用的是 Slim 2。$container = new Container();我这里没有容器。
【解决方案2】:

扩展类并覆盖各自的方法 handleErrors() 和 run()。

class Core_Slim_Slim extends \Slim\Slim
{
public static function handleErrors($errno, $errstr = '', $errfile = '', $errline = '')
    {
        //Do whatever you want...
    }

public function run()
    {
        set_error_handler(array('Core_Slim_Slim', 'handleErrors'));
    }

}

实例化新的自定义 slim 类并调用它的 Run 方法,如下所示。

$app = new Core_Slim_Slim();
$app->run();

感谢大家的回复:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多