Я создаю приложение на основе Silex 1.3. Это моя первая встреча с Silex, поэтому я не очень хорошо знаком с ней.Могу ли я отключить обработку ошибок/исключений в Silex?
Я бы хотел использовать собственный обработчик ошибок/исключений, который, в основном, является классом, который регистрирует себя, а затем будет улавливать все ошибки, фатальные ошибки и исключать исключения и обрабатывать их либо с помощью Уопса в разработке, либо с помощью грациозный обработчик в производстве.
Однако, когда я нахожусь в контроллере silex, промежуточном программном обеспечении, независимо от того, что Silex возьмет на себя и использует собственную обработку ошибок. Mine по-прежнему будет сталкиваться с фатальными ошибками, поскольку Silex, по-видимому, не подключается к выключению, но все остальное заменяется страницей по умолчанию «Что-то пошло не так» от Silex.
Я понимаю, что я могу использовать $ app-> error() для переопределения HOW Silex обрабатывает ошибки, но я не нашел способ отбросить их обратно к исходному ErrorHandler или переопределить WHETHER Silex ошибки.
Итак, кто-нибудь знает, как: a) сказать Silex использовать мой обработчик ошибок, используя $ app-> error() или каким-либо другим способом, b) просто отключить обработку ошибок в Silex целиком или c) как в крайнем случае, получить Silex, чтобы поймать фатальные ошибки, поэтому я могу обрабатывать все три типа из $ app-> error()?
Поскольку это мой первый раз с использованием Silex, не стесняйтесь исправить меня или показать, как вы обрабатываете ошибки в Silex, если есть лучший способ, но, пожалуйста, также ответьте на вопрос, если сможете.
Некоторые примеры кода:
// This will register itself and then handle all errors.
$handler = new ErrorHandler();
// These are all handled appropriately.
nonexistentfunction(); // Correctly caught by ErrorHandler::handleFatalError
trigger_error("example"); // Correctly caught by ErrorHandler::handlePhpError
throw new \Exception("example"); // Correctly caught by ErrorHandler::handleException
$app = new \Silex\Application();
$app->get('/', function() use ($app) {
// This is still handled correctly.
nonexistentfunction(); // Correctly caught by ErrorHandler::handleFatalError
// However, these are now overridden by Silex.
trigger_error("example"); // INCORRECTLY DISPLAYS SILEX ERROR PAGE.
throw new \Exception("example"); // INCORRECTLY DISPLAYS SILEX ERROR PAGE.
});
$app->run();
И очень упрощенный ErrorHandler для справки:
Class ErrorHandler
{
public function __construct()
{
$this->register();
}
private function register()
{
register_shutdown_function(array($this, "handleFatalError"));
set_error_handler(array($this, "handlePhpError"));
set_exception_handler(array($this, "handleException"));
}
// Etc.
}
$ app ['exception_handler'] -> disable(); Благодаря! Это именно то, что мне нужно. Забавно, теперь, когда вы дали его мне, я могу найти его в API. Я хочу, чтобы их документация была немного лучше = o) – Eli