Routes 在中间件中更改GET to POST-SLIM Framework 3

Routes 在中间件中更改GET to POST-SLIM Framework 3,routes,slim,middleware,slim-3,Routes,Slim,Middleware,Slim 3,我正在使用SlimFramework3开发RESTAPI,我需要检查GET调用是否返回中间件中的特定数据。如果没有返回任何数据,我需要使用POST方法进行新调用,首先在API中写入数据,然后继续使用$next() 我尝试了withRedirect(),但它似乎只适用于GET。有没有办法做到这一点?谢谢 <?php $app->add(function($req, $res, $next){ $uri = $req->getUri()->getPath(); //get

我正在使用SlimFramework3开发RESTAPI,我需要检查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);

    }

  }

});

要回答您的问题,请使用来执行POST请求,因为您需要执行新的HTTP调用,Guzzle是一个非常好的PHP HTTP客户端

但是,请注意,这是一种非常糟糕的模式,您不应该这样做。GET不应该有副作用,创建新数据肯定是副作用


更好的模式是,如果数据不存在,则返回4xx错误,然后让客户端执行POST请求以创建它。

要回答您的问题,请使用来执行POST请求,因为您需要执行新的HTTP调用,Guzzle是一个非常好的PHP HTTP客户端

但是,请注意,这是一种非常糟糕的模式,您不应该这样做。GET不应该有副作用,创建新数据肯定是副作用


更好的模式是,如果数据不存在,则返回4xx错误,然后让客户端执行POST请求以创建数据。

如果希望中间件仅应用于某些路由,则无需将其添加到$app。为路由本身添加中间件。这听起来像是客户端应该做的事情,而不是服务器;另外,我也在发帖子——听起来有点可疑。@ZamronyP.Juhara谢谢。你说得对@谢谢。也许我必须改变它,真的。如果你希望中间件只应用于某些路由,那么你不需要将它添加到$app。为路由本身添加中间件。这听起来像是客户端应该做的事情,而不是服务器;另外,我也在发帖子——听起来有点可疑。@ZamronyP.Juhara谢谢。你说得对@谢谢。也许我必须改变它,真的。我非常同意。谢谢。这些是非常有用的提示。我会重新考虑一下逻辑(但有趣的是,在这种情况下,狂饮是一种选择),我完全同意。谢谢。这些是非常有用的提示。我会重新考虑逻辑(但有趣的是,在这些情况下,狂饮是一种选择)