为什么我的REST API的我GET功能犯规返回任何价值?(Why my GET function

2019-10-23 05:43发布

我使用的XAMPPPhpMyAdmin保存我的数据库,我试图让一个REST API,但我没有很好的效果。 对于这一点,我使用超薄框架。

我把所有修身框架文件的文件夹命名为project/htdocs的文件夹中的xampp和创建我connect.php和我api.php文件。 我也改变我index.php使用,我前面提到的两个文件。

我可配置我的connect.phpindex.php文件,我在创建了GET方法api.php文件,但,当我试图让有数据库,我不能得到任何价值的信息。

这两个文件,我的意思是, connect.phpapi.php是一个文件夹命名中app ,并进一步他们在另一个文件夹名为libsroutes分别。

/project/app/libs/connect.php
/project/app/routes/api.php

我把这里所有我的代码:

的index.php

<?php

  require 'Slim/Slim.php'; 

  \Slim\Slim::registerAutoloader();

  $app = new \Slim\Slim();

  define("SPECIALCONSTANT",true);

  require 'app/libs/connect.php';
  require 'app/routes/api.php';

  $app->run();

?>

connect.php

<?php
if(!defined("SPECIALCONSTANT")) die("Access denied");

function getConnection()
{
    try{
        $db_username = "root";
        $db_password = "";
        $connection = new PDO("mysql:host=localhost;dbname=project",$db_username,$db_password);
        $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e)
    {
        echo "Error: " . $e->getMessage();
    }

    return $connection;
}
?>

api.php

<?php
if(!defined("SPECIALCONSTANT")) die("Access denied");

$app->get("/users/",function() use($app)
{
    try{
        $connection = getConnection();
        $dbh = $connection->prepare("SELECT * FROM users");
        $dbh->execute();
        $users = $dbh->fetchAll();
        $connection = null;

        $app->response->headers->set("Content-type","application/json");
        $app->response->status(200);
        $app->response->body(json_encode($users));

    }catch(PDOException $e)
    {
        echo "Error: " . $e->getMessage();
    }
});

我的数据库名是project ,而我有我的数据库中的表名为users 。 这个数据库是坚持我phpmyadmin

于是,我试着与我的这个表中返回,我有值get方法在我的网址将localhost/project/users/但它不工作。 我刚才看到一个空白页,我在网上看到,它会得给我说,我有我的表中的值上。

不过,我觉得我的问题可能是在headersstatusbody ,因为我无法很正确理解他们,我寻找他们的文档中,但它并没有帮助我很多。 我搜索的页面是:

http://docs.slimframework.com/response/headers/ http://docs.slimframework.com/response/status/ http://docs.slimframework.com/response/body/

所以,请你也可以添加一些信息,以clearify这些概念我将与大家很感激。

我在REST API真正的新,我不能看到我的错误(我使用的教程)。 为什么它不工作?

编辑:我试过阿卜杜阿德尔的建议,但它也没有工作。 它给我下面的错误。

细节

Type: ErrorException
Code: 8
Message: Undefined variable: users
File: C:\xampp\htdocs\proyecto\app\routes\api.php
Line: 21 --> Here it's the line when I have echo sentence

跟踪

0 C:\xampp\htdocs\project\app\routes\api.php(21): Slim\Slim::handleErrors(8, 'Undefined varia...', 'C:\\xampp\\htdocs...', 21, Array)
1 [internal function]: {closure}()
2 C:\xampp\htdocs\project\Slim\Route.php(468): call_user_func_array(Object(Closure), Array)
3 C:\xampp\htdocs\project\Slim\Slim.php(1357): Slim\Route->dispatch()
4 C:\xampp\htdocs\project\Slim\Middleware\Flash.php(85): Slim\Slim->call()
5 C:\xampp\htdocs\project\Slim\Middleware\MethodOverride.php(92): Slim\Middleware\Flash->call()
6 C:\xampp\htdocs\project\Slim\Middleware\PrettyExceptions.php(67): Slim\Middleware\MethodOverride->call()
7 C:\xampp\htdocs\project\Slim\Slim.php(1302): Slim\Middleware\PrettyExceptions->call()
8 C:\xampp\htdocs\project\index.php(19): Slim\Slim->run()
9 {main} 

EDIT2:现在我知道这个问题是在json_encode ,因为它给我的错误: JSON_ERROR_UTF8当我使用json_last_error() 到了那一刻我没能解决它。

Answer 1:

更改

$app->response->headers->set("Content-type","application/json");
$app->response->status(200);
$app->response->body(json_encode($users));

header("HTTP/1.1 200");
header("Content-Type:application/json; charset=utf-8");
echo json_encode($users);


文章来源: Why my GET function of my API REST doesnt return any value?