【发布时间】:2018-10-23 13:25:20
【问题描述】:
我正在使用 SLIM FRAMEWORK 3 开发 Rest API,我需要检查 GET 调用是否返回中间件中的特定数据。如果没有返回数据,我需要先用 POST 方法重新调用,将数据写入 API,然后继续 $next()。
我尝试了 withRedirect(),但它似乎只适用于 GET。有没有办法做到这一点?谢谢。
<?php
$app->add(function($req, $res, $next){
$uri = $req->getUri()->getPath();
//get query_string params
$params = $req->getUri()->getQuery();
parse_str($params, $args);
//check if is desired route...
if($req->isGet() && isset($args['name']) && isset($args['borndate']) && $uri == 'api/v1/example'){
global $app;
//try to get data from DB
$dados_mapa = (new App\Models\MyExampleModel())->get()
->where('name', '=', $args['name'])
->where('borndate', '=', $args['borndate'])
->first();
//check data
if(isset($dados_mapa->id))
{
//data exists, continue
return $next($req, $res);
}else{
//no data, I need to do a POST call here...
$new_post_uri = 'api/v1/example';
doPostHere($new_post_uri); ////how to make this POST?
//continue with the first call
return $next($req, $res);
}
}
});
【问题讨论】:
-
如果您希望中间件仅适用于某些路由,则无需将其添加到 $app。将中间件添加到路由本身。
-
这听起来像是客户端应该做的事情,而不是你的服务器;还有中间件发出 POST 请求 - 听起来很可疑。
-
@ZamronyP.Juhara 谢谢。你是对的!
-
@zedling 谢谢。也许我必须改变它,真的。
标签: routes slim middleware slim-3