Silex:обработчики ошибок для определенных типов исключений

Возможно ли в 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(), но предпочитаю работать с исключениями

5
задан ChrisR 23 March 2012 в 14:56
поделиться