GET-запрос PHP slimframework ничего не возвращает - PullRequest
0 голосов
/ 07 мая 2018

Поэтому я использую PHP slimframework (https://www.slimframework.com/) для простого API, который мне нужно использовать в приложении React, и я не могу заставить свой запрос работать с этими параметрами, потому что $ start_date и $ end_date не возвращаются что-нибудь из запроса GET. Этот запрос MySQL работает так, как должен, я уже проверил его с помощью startDate и endDate. Возвращаюсь из своего приложения React, проблема в том, что я не могу понять, как вернуть данные из этих запросов GET в мой $ Переменные start_date и $ end_date.

Вот так выглядит мой бэкэнд (slimframework):

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

$app = new \Slim\App;


$app->get('/api/date', function(Request $request, Response $response){
    $start_date=date('Y-m-d H:i:s', $_GET['startDate']);
    $end_date=date('Y-m-d H:i:s', $_GET['endDate']);
    // $start_date = $app->request()->params('startDate');
    // $end_date = $app->request()->params('endDate');
    // $start_date = $request->getAttribute['startDate'];
    // $end_date = $request->getAttribute('endDate');

    $sql = "SELECT * FROM `datescalendar` where `date` BETWEEN '{$start_date}' AND '{$end_date}'";
    // $sql = "SELECT * FROM `datescalendar` where `date` BETWEEN '1525679047' AND '1526283847'";


    try{
        // Get DB Object
        $db = new db();
        // Connect
        $db = $db->connect();

        $stmt = $db->query($sql);
        $dates = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db = null;
        // return $response->withJson($dates);
        echo json_encode($dates);
    } catch(PDOException $e){
        echo '{"error": {"text": '.$e->getMessage().'}';
    }
}); 

Вот как я получаю данные из API в моем приложении React:

fetchNewDatesNext() {
    const startDate = this.state.startDate.unix();
    const endDate = this.state.startDate.add(1, 'week').unix();

    axios.get(`http://localhost/api/date?startDate=${startDate}&endDate=${endDate}`).then((response) => {
      this.setState(() => ({ data: response.data}));
    });
  };

Приложение работает так, как должно, когда я просто запрашиваю все сразу из базы данных ($sql = "SELECT * FROM datescalendar)

Есть идеи?

Ответы [ 4 ]

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

Я только что узнал, что проблема заключается в том, как изменяются эти параметры в моей логике на стороне приложения React. Я возвращаю действительные параметры, но не на нужную неделю. Поскольку я получаю только 1 неделю данных из API, я не получаю данные за правильную неделю. В любом случае спасибо за помощь!

Кроме того, правильный способ получить параметры запроса для меня:

$startDate = $request->getQueryParam(‘startDate’);

$endDate = $request->getQueryParam(‘endDate’);
0 голосов
/ 08 мая 2018
$app->get('/api/somewhere', function( $request,  $response){

//Calling ..../api/somewhere?stuff=bob

// var_dump($_GET['stuff']);  // <= Bad way
//=> string(3) "bob"


//var_dump($request->getAttribute['stuff']);
//=> Notice: Undefined property: Slim\Http\Request::$getAttribute

//var_dump($request->getParam('stuff'));
//=> string(3) "bob"

var_dump($request->getParams());
//=> array(1) { ["stuff"]=> string(3) "bob" } 
});

Я думаю, что ваш запрос просто пуст

0 голосов
/ 08 мая 2018
$startDate = $request->getQueryParam('startDate');
$endDate = $request->getQueryParam('endDate');

Также следите за этим запросом, он уязвим для внедрения SQL. Вы должны использовать подготовленные заявления. Смотри https://phpdelusions.net/pdo#prepared

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

попробуйте получить ваши параметры с \Request slim class, например: $paramValue = $app->request()->params('paramName');.

Вы можете узнать больше о Здесь , Slim v2 документации

...