2014-12-16 2 views
0

The Slim Framework хороша - серьезно. Одна из проблем, с которыми я столкнулся, связана с тем, как она обрабатывает ошибки. В ванильном PHP-коде я иногда использую инструкции trigger_error как средство отладки. В ванильном PHP это не имеет никаких неблагоприятных последствий, поскольку по умолчанию trigger_errors являются ошибками типа E_USER_NOTICE, которые не останавливают скрипт мертвым на своих дорожках. Однако в Slim вещи работают по-разному. Благоприятный trigger_error заставляет его бросать шаткий и возвращается HTTP 500.Тонкая обработка ошибок

Я думал, что это может быть исправлено

  1. Изменение режима к развитию или что-то, но в документации утверждают, что это не имеет никакого значения вообще к тому, как Слим работает внутри.
  2. Следующий порт захода - изменение тонкий уровень протоколирования ошибок

    $ приложение = новый \ Слим \ Слим (массив ('log.level' => \ \ Слим Вход :: ERROR);

не совсем такой же эффект, как error_reporting PHP. Установка его останавливает ошибка с плавающей до файла error.log (регистратор ошибок по умолчанию используется Слим), но самое главное, что делает не остановить HTTP 500.

Я столкнулся с сообщениями форума, которые предлагают повторно поместив метод Slim :: handleErrors по умолчанию. Это было бы легко, но я думаю, что это неверно. Каков правильный способ остановить Slim, придя к мертвой остановке, когда он столкнется с совершенно безобидным trigger_error? Я могу избежать этого, но могу полагаться на другой код, который может иметь такие утверждения. Я бы очень признателен за любую помощь.

+0

Привет, вы используете флаг «debug»? – ruifn

+0

как насчет ввода trigger_error в блок try/catch? http://docs.slimframework.com/#Route-Helpers –

+0

@ruifn - просто изменение режима Slim - даже отладка - ничего не делает. Котировка из руководства Slim - Slim преобразует ошибку в экземпляры ErrorException ... и если отладка включена, Slim будет использовать встроенный обработчик ошибок для отображения диагностической информации для исключенных исключений. Если отладка отключена, Slim вместо этого вызывается ваш пользовательский обработчик ошибок, передавая ему исключенное иначе исключение в качестве его первого и единственного аргумента. – DroidOS

ответ

1

Ответ оказывается довольно простым. Я понял это, проверив функцию handleErrors в slim.php. Просто выдать

error_reporting(E_ALL & ~E_USER_WARNING); 

до где trigger_error называется, и вы находитесь в бизнесе. Где-то в строке Slim изменяется ошибка PHP error_reporting по умолчанию, чтобы включить E_USER_WARNING.