Я пытаюсь создать сервер API, который должен подключаться к базе данных, используя платформу SLIM, следуя этому учебнику .На самом деле я создал конечную точку, которая получает данные из базы данных, но не может вставить новую.
Каждый раз, когда я пытаюсь вставить новые данные, параметры POST равны нулю, а база данных отправляет только сообщение об ошибке..
В моем файле groupes.php у меня есть следующее:
<?php
use Slim\Http\Request;
use Slim\Http\Response;
// Routes
$app->get('/[{name}]', function (Request $request, Response $response, array$args) {
// Sample log message
$this->logger->info("Slim-Skeleton '/' route");
// Render index view
return $this->renderer->render($response, 'index.phtml', $args);
});
$app->group('/api', function () use ($app) {
$app->group('/v1', function () use ($app) {
$app->get('/clients', 'getClients');
$app->post('/make', 'addClient');
});
});
Приведенный выше код просто определяет две конечные точки: getClients
и addClient
.
И в моем index.php у меня есть:
function getConnection(){
$dbhost = "127.0.0.1";
$dbuser = "root";
$dbpass = "dzpga883yRusPHhv";
$dbname = "pruebaandroid";
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $dbh;
}
//method: GET
//domain: mi-api/api/v1/clients
function getClients($response){
$sql = "SELECT * FROM cliente";
try{
$stmt = getConnection()->query($sql);
$client = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
return json_encode($client);
}
catch(PDOException $e){
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
//method: POST
//domain: mi-api/api/v1/make
function addClient($request) {
$client = json_decode($request->getBody());
$sql = 'INSERT INTO cliente (nombre, apellido, cedula, direccion, telefono, email) VALUES (:nombre, :apellido, :cedula, :direccion, :telefono, :email)';
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam(":nombre", $client->nombre);
$stmt->bindParam(":apellido", $client->apellido);
$stmt->bindParam(":cedula", $client->cedula);
$stmt->bindParam(":direccion", $client->direccion);
$stmt->bindParam(":telefono", $client->telefono);
$stmt->bindParam(":email", $client->email);
$stmt->execute();
$client->id = $db->lastInsertId();
$db = null;
echo json_encode($client);
}
catch(PDOException $e){
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
Итак, использование почтальона для выполнения запроса GET для mi-api/api/v1/clientes
получения всех данных, как указано, но когда я пытаюсь с запросом POST mi-api/api/v1/make?nombre=asdf&apellido=asdf&cedula=asdf&direccion=asdf&telefono=asdf&email=asdf
, этоя должен вставить новую информацию, но почтальон выдаст мне следующую ошибку:
{"error":{"text":SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nombre' cannot be null}}
Похоже, функция addClient
не получает параметры, поэтому принимает ее как ноль.Почему это происходит?Я не знаю, что здесь не так, любой ответ приветствуется.
См. Изображение
PD: да, БД хорошо отформатирована, этоУ меня есть идентификатор в качестве автоинкремента PK, и я попытался напечатать echo client->nombre
и печатает только ошибку.