2017-02-15 13 views
0

我有一個silex BootableProvider來檢查每個請求上的某些要求,然後執行對我的任何端點的調用。所有的作品都很好,除了當我使用$ app-> abort('403','禁止出於某種原因');在boot()方法的任何地方,響應總是返回代碼200.'禁止'消息正確顯示並且如預期的那樣中斷執行,但是沒有有意義的響應狀態代碼使得處理這些故障變得困難/麻煩響應。在BootableProviderInterface上的silex abort()會忽略提供的代碼,響應總是有200個

我使用的是silex 2.0.4。

但是,如果我在任何實現ControllerProviderInterface的終端執行$ app-> abort(...),在同一請求線程中,響應具有我在中止中指定的正確響應代碼,所以我我認爲這是一個時間問題。

任何意見,不勝感激。

示例代碼:

class BootProvider implements BootableProviderInterface { 


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

} 

... 

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

我試過路過頭重寫狀態無濟於事。

謝謝!

回答

0

在你的情況下,你應該只是例外Fatal error: Uncaught exception...。服務提供程序在內核句柄循環之前啓動,因此不會處理錯誤。

嘗試添加將在控制器之前執行的事件偵聽器或中間件,並將進行所有檢查。

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

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

+0

的確叫我在開機的方法產生只是一個未經處理的異常。您的建議非常適合我的使用。這正是我需要的,我非常感謝! (ps。我已經投了票,但沒有足夠的票數來顯示,謝謝!) –

+0

只接受我的回答) –

+0

完成,對不起,第一次來這裏......謝謝! –

相關問題