Изменение GET на POST в Middleware - SLIM Framework 3 - PullRequest
0 голосов
/ 14 мая 2018

Я работаю над API отдыха с SLIM FRAMEWORK 3, и мне нужно проверить, возвращает ли вызов GET конкретные данные в Middleware. Если данные не возвращаются, мне нужно сначала сделать новый вызов с методом 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);

    }

  }

});

1 Ответ

0 голосов
/ 14 мая 2018

Чтобы ответить на ваш вопрос, используйте Guzzle, чтобы выполнить запрос POST, поскольку вы хотите выполнить новый HTTP-вызов, и Guzzle - неплохой HTTP-клиент для PHP.

ОднакоИмейте в виду, что это особенно плохой шаблон для использования, и вы не должны этого делать.GET не должен иметь побочных эффектов, а создание новых данных, безусловно, является побочным эффектом!

Лучше было бы вернуть ошибку 4xx, если данных не существует, а затем заставить клиента выполнитьPOST-запрос для его создания.

...