Как я могу переопределить стандартную функцию обработки ошибок Slim версии 2 - PullRequest
0 голосов
/ 20 сентября 2019

Как я могу переопределить стандартную обработку ошибок Slim версии 2?Я не хочу, чтобы мое приложение зависало каждый раз, когда я получаю предупреждающее сообщение.По сути, я хочу переопределить функцию handleErrors () из класса \ Slim \ Slim.

Я рассмотрел, как я могу переопределить это поведение, но потому что он вызывается как:

set_error_handler(array('\Slim\Slim', 'handleErrors')); в прогоне Сима(), мне пришлось самому редактировать исходный код Slim.Я изменил вышеупомянутое на: set_error_handler(array(get_class($this), 'handleErrors')); Затем я расширил Slim с другим поведением для handleErrors () и создал экземпляр своего пользовательского класса вместо Slim.Это отлично работает, но я не хочу касаться основного класса Slim.Код FYI

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 ()

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Расширение класса и переопределение соответствующих методов 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();

Спасибо всем за ваш ответ:)

0 голосов
/ 20 сентября 2019

Я обрабатываю это в моем 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();

Также возможно перезаписать как тонкий запрос по умолчанию, так и ответ таким образом

...