2015-10-27 17 views
2

我使用硅石創建API和我的路線看起來類似這樣:的Symfony2/Silex的中間件

$api = $app['controllers_factory']; 
$users = $app['controllers_factory']; 

$users->match('/', UsersController::action); 

$api->mount('/users', $users); 
$app->mount('/api', $api); 

所以路線會的BaseURL/API /用戶

我想要做什麼現在是將一個before()附加到$ api控制器組並強制驗證api,因此任何以/api/...users爲前綴的鏈接將會需要驗證。 但它似乎不是它的工作方式,當我把一個之前的$ api,它只適用於/ api的根,而不是api/users或api/posts或api/categories,它們需要自己的中間件。

所以我的問題是:如何在baseurl/api/...之後強制執行一切,以要求在Silex環境中進行驗證。

回答

1

您可以將before()添加到$app實例(請參閱http://silex.sensiolabs.org/doc/middlewares.html#before-middleware)。

並測試$request對象以查看是否需要驗證。

您也可以使用SecurityServiceProvider,但這可能是矯枉過正,取決於您的使用情況。

+0

這將工作,但如果我想添加額外的路由的其他東西,這將得到驗證baseurl /管理 –

+0

測試'$ request-> getRequestUri()',即'if(preg_match('#^/(api | other)#',$ request-> getRequestUri())){..}' –