有没有办法在Slim PHP中的每个路由之前调用例程?我有一个RESTful API,我想在调用API方法之前验证登录。我的代码如下:
$app = new Slim();
$app->get('user/:id', function($id) use($app){
$user = API::getUser($id);
if($user){
$app->response->status(200);
}else{
$app->response->status(404);
}
});
API发出请求并处理JSON响应。我想附加一个允许请求的前提条件,比如回调。 API有一个返回API::validate($token)
或true
的方法false
,如果身份验证失败,我想抓住这个并返回状态代码401。某些方法(如API::login()
和API::register()
)不需要此验证。
答案 0 :(得分:3)
首先,我强烈建议您阅读所有文档。它不是那么大,你会得到一个很好的框架介绍。 http://docs.slimframework.com/
你不需要一个例程,但需要在每个例程之前调用一个钩子。这就是苗条的结构。
一个简单的解决方案是将非受保护的页面保留在一个数组中,并在该钩子中检查请求是否受到保护。
$app->hook('slim.before.dispatch', function() use ($app) {
$publicRoutes = array('login', 'welcome');
if(!in_array($app->router()->getCurrentRoute(), $publicRoutes)
// Get the token
$result = API::validate($token);
if(!$result) {
$app->redirect('/login');
}
});
如果您想使用权限级别,oauths等处理更复杂的流程,您宁可使用中间件。我喜欢它们,因为它是使用Slim执行此类任务的正确方法,您可以重复使用它们。