2017-01-18 1 views
0

J'ai une application silex. J'ai prise un gestionnaire générique enregistré:Pourquoi le gestionnaire d'erreurs silex ne s'exécute-t-il pas?

$app->error(function (\Exception $e) use ($app) { 
    return (new JsonResponse(['message' => 'Something truly horrible happened. Sorry.', 500)])->send(); 
    } 
); 

Pourtant, quand quelque chose est de lancer une exception dans $app::share(), il ne déclenche pas:

$app->share(function() { 
    throw new \Exception('wtf'); 
})); 

Cette exception ne sera pas gérée par le gestionnaire d'erreurs, mais pops directement comme s'il n'y avait pas de gestionnaire en place du tout:

exception 'Exception' with message 'wtf' in appinit.php:230 
Stack trace: #0 ./vendor/pimple/pimple/lib/Pimple.php(126): Closure$#12() #1 ./vendor/pimple/pimple/lib/Pimple.php(83): Closure$Pimple::share() #2 ./web/appinit.php(234): Pimple->offsetGet() #3 app.php(6): include() #4 {main} 

Je me attendais une réponse 400 Bad Request de base avec le contenu:

{ 
    "message": "Something truly horrible happened. Sorry.", 
} 

Pourquoi mon gestionnaire ne s'active pas?

+0

double possible de [Silex gestionnaire d'exceptions] (http://stackoverflow.com/questions/20311508/silex-exception -handler) – k0pernikus

+0

Je ne pense pas que c'est lié à la question que vous postez. Avez-vous exécuté ce code avec l'indicateur d'exécution sur ('' '$ app ['debug'] = true''')? Si oui, pouvez-vous l'éteindre et voir ce qui se passe? – mTorres

Répondre

0

Dans silex, le gestionnaire d'erreurs gère uniquement les exceptions se produisant sur les middlewares. Donc, en fait, l'erreur est jamais appelé ce qui est par la conception que l'exception se produit sur:

try { 
    $app->run() 
} catch(\Exception $e) { 
    // this will be caught 
}