Почему не работает phpErrorHandler Slim Framework?

У меня проблемы с получением phpErrorHandler для работы. Я использую последнюю версию Slim, и мой сервер работает под управлением PHP 7.1.

use \Slim\App as App;
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

$app = new App([
'errorHandler' => function ($c) {
return function ($request, $response, $error) use ($c) {
return $c['response']
->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('application error');
};
},
'phpErrorHandler' => function ($c) {
return function ($request, $response, $error) use ($c) {
return $c['response']
->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('runtime error');
};
}
]);

Когда я выбрасываю исключение из моего кода, вызывается обработчик ошибок, и мой вывод — «ошибка приложения». Однако, когда я выкидываю Error из своего кода или вводю синтаксические ошибки, phpErrorHandler не вызывается и, в зависимости от моих настроек, PHP выдает сообщение об ошибке с помощью трассировки стека.

Я пытался добавить

ini_set('display_errors', 0); // do not produce the standard output when an error occurs
error_reporting(-1); // enable error reporting (is this required for Slim?)

Но любые изменения, которые я делаю в этой конфигурации, похоже, не влияют на то, вызывается ли мое закрытие или нет.

-редактировать-

Я попытался выполнить часть Javascript, которая входит в консоль. Это работает для errorHandler, а не для phpErrorHandler. Также простой

die('oops');

ничего не делает в phpErrorHandler. Похоже, что обратный вызов вообще не вызывается.

Если я положу попробовать / поймать

$app->run();

Я умею ловить ошибки. Однако это вызывает некоторые неприятные побочные эффекты, которых я предпочитаю избегать. Однако это говорит мне о том, что это не параметр конфигурации, который удерживает меня от перехвата ошибок.

2

Решение

У меня была та же проблема, и я немного сбился с толку документацией Slim 3, в которой упоминается функция phpErrorHandler. Однако, phpErrorHandler не был добавлен в Slim до версии 3.2.0: https://github.com/slimphp/Slim/releases/tag/3.2.0

Если вы используете Slim версию < 3.2.0, попробуйте обновить.

1

Другие решения

может быть попытаться отключить display_startup_errors ?

мой конфиг:

error_reporting(E_ALL);
ini_set("display_errors", 0);
ini_set('display_startup_errors', 0);

РЕДАКТИРОВАТЬ:
также die('oops'); это не ошибка, он просто умрет / завершит выполнение скрипта, после этого ничего не будет выполнено

0

По вопросам рекламы [email protected]