Я использую XAMPP
с PhpMyAdmin
для хранения моей базы данных, и я пытаюсь сделать REST API, но у меня нет хороших результатов. Для этого я использую Slim framework.
Я поместил все файлы рамок Slim в папку с именем project
внутри /htdocs
в папке xampp
и я создаю файлы connect.php
и api.php
. Я также меняю index.php
на использование обоих файлов, о которых я упоминал ранее.
Я сконфигурировал свои файлы connect.php
и index.php
и я создал свой метод GET в файле api.php
но когда я пытаюсь получить информацию о том, что есть в базе данных, я не могу получить никакого значения.
Оба файла, я имею в виду, connect.php
и api.php
находятся внутри папки с именем app
а затем они находятся в другой папке с именами libs
и libs
соответственно.
/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
помещающим мой url localhost/project/users/
но он не работает. Я просто увидел пустую страницу, и я видел в Интернете, что мне придется дать мне те ценности, которые у меня есть в моем столе.
Я, хотя моя проблема могла быть в headers
, status
и body
потому что я не мог их правильно понять, и я искал их в документации, но мне это не очень помогло. Страницы, которые я искал, были:
http://docs.slimframework.com/response/headers/ http://docs.slimframework.com/response/status/ http://docs.slimframework.com/response/body/
Поэтому, пожалуйста, если вы также можете добавить некоторую информацию, чтобы очистить эти понятия, я буду так благодарен всем вам.
Я действительно новичок в API REST, и я не вижу свою ошибку (я использую учебник). Почему это не работает?
EDIT: Я пробовал предложение Абдо Аделя, но он также не работал. Это дает мне следующую ошибку.
Детали
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()
. К моменту, когда я не смог его решить.
изменение
$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);