Возможно ли в Silex использовать обработчик ошибок, основанный на том, какое исключение выбрасывается?
Я знаю, что это возможно с одним обработчиком исключений и оператором switch для имени класса сгенерированного исключения, но мне кажется, что «способ Silex» чище, но не работает.
Вот как я ожидал, что это будет работать
<?php
// Handle access denied errors
$app->error(function (\App\Rest\Exception\AccessDenied $e) {
$message = $e->getMessage() ?: 'Access denied!';
return new Response($message, 403);
});
// Handle Resource not found errors
$app->error(function (\App\Rest\Exception\ResourceNotFound $e) {
$message = $e->getMessage() ?: 'Resource not found!';
return new Response($message, 404);
});
// Handle other exception as 500 errors
$app->error(function (\Exception $e, $code) {
return new Response($e->getMessage(), $code);
});
Проблема в том, что когда я выбрасываю исключение ResourceNotFound в моем контроллере, выполняется обработчик ошибок, связанный с AccessDenied
Поддающаяся устранению фатальная ошибка:Аргумент 1 передается {замыканию }()должен быть экземпляром App\Rest\Exception\AccessDenied, экземпляром App\Rest\Exception\ResourceNotFound задан
Это достижимо другим способом или я должен просто запихнуть все в обработчик, который работает с общими исключениями и включить тип выбрасываемого исключения?
PS:Я знаю метод $app->abort()
, но предпочитаю работать с исключениями