2017-02-15 2 views
0

J'ai un BootableProvider silex pour vérifier certaines exigences sur chaque requête avant d'exécuter des appels à l'un de mes points d'extrémité. Tout fonctionne bien, sauf quand j'utilise $ app-> abort ('403', 'interdit pour une raison quelconque'); n'importe où dans la méthode boot(), la réponse renvoie toujours le code 200. Le message 'forbidden' est correctement affiché et l'exécution est interrompue comme prévu heureusement, mais ne pas avoir un code d'état significatif sur la réponse rend difficile/encombrant de traiter ces échecs réponses J'utilise silex 2.0.4. Cependant, si j'exécute $ app-> abort (...) depuis n'importe lequel de mes terminaux qui implémentent ControllerProviderInterface, dans le même thread de requête, les réponses ont les bons codes de réponse que je spécifie dans l'abandon, donc je Je pense que c'est un problème de timing.silex abort() sur BootableProviderInterface ignore le code fourni, la réponse a toujours 200

Tout conseil est grandement apprécié.

Exemple de code:

class BootProvider implements BootableProviderInterface { 


    function boot(Application $app) { 
     $app->abort(403, 'not allowed'); 
    } 

} 

... 

$app->register(new My\Api\BootProvider()); 

J'ai essayé les en-têtes passant à remplacer le statut en vain.

Merci!

Répondre

0

Dans votre cas, vous devriez obtenir l'exception Fatal error: Uncaught exception.... Les fournisseurs de services sont démarrés avant le cycle de gestion du noyau, les erreurs ne sont donc pas traitées. Essayez d'ajouter un écouteur d'événement ou un intergiciel qui sera exécuté avant les contrôleurs et effectuera toutes les vérifications.

$app->before(function (Request $request, Application $app) { 
    $app->abort(403, 'not allowed'); 
}); 

http://silex.sensiolabs.org/doc/2.0/middlewares.html

+0

En effet appeler ma méthode au démarrage générait juste une exception gérée non. Votre suggestion est parfaite pour mon usage. C'est exactement ce dont j'avais besoin, je l'apprécie vraiment! (ps., j'ai voté mais je n'ai pas assez de voix pour que ça se voit, merci!) –

+0

juste accepter ma réponse) –

+0

fait, désolé, la première fois ici ... Merci! –