2017-02-15 1 views
0

Ich habe einen silex BootableProvider, um nach einigen Anforderungen für jede Anfrage zu suchen, bevor ich Anrufe an irgendeinen meiner Endpunkte ausführe. Alles funktioniert gut, außer dass ich den $ app-> abort ('403', 'aus irgendeinem Grund verboten') benutze; An jeder Stelle in der boot() -Methode gibt die Antwort immer den Code 200 zurück. Die 'verbotene' Nachricht wird korrekt angezeigt und die Ausführung wird glücklicherweise unterbrochen, aber ein aussagekräftiger Statuscode für die Antwort macht es schwer/mühsam, diesen Fehler zu verarbeiten Antworten.silex abort() auf BootableProviderInterface ignoriert bereitgestellten Code, Antwort hat 200 immer

Ich benutze Silex 2.0.4.

Wenn ich jedoch den $ app-> abort (...) von irgendeinem meiner Endpunkte aus führe, die ControllerProviderInterface im selben Anfragethread implementieren, haben die Antworten die richtigen Antwortcodes, die ich im Abort spezifiziere, also ich Ich denke, es ist ein Timing-Problem.

Jede Beratung wird sehr geschätzt.

Beispielcode:

class BootProvider implements BootableProviderInterface { 


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

} 

... 

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

Ich habe versucht, Header vorbei Status ohne Erfolg außer Kraft zu setzen.

Danke!

Antwort

0

In Ihrem Fall sollten Sie nur Ausnahme Fatal error: Uncaught exception... bekommen. Service Provider werden vor dem Kernel-Handle-Zyklus gebootet, so dass Fehler nicht verarbeitet werden.

Versuchen Sie, Ereignis-Listener oder Middleware hinzuzufügen, die vor den Controllern ausgeführt werden und alle Prüfungen durchführen.

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

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

+0

der Tat meine Methode beim Booten zu erzeugen Ausnahme nur einen nicht behandelt rief. Ihr Vorschlag ist perfekt für meinen Gebrauch. Das ist genau das, was ich brauchte, ich schätze es wirklich! (ps. Ich habe gewählt, aber habe nicht genügend Stimmen dafür zu zeigen. Danke!) –

+0

akzeptiere einfach meine Antwort) –

+0

getan, sorry, das erste Mal hier ... Danke! –

Verwandte Themen