2017-02-15 15 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

完成,对不起,第一次来这里......谢谢! –

相关问题