Fichier config/database.php

Ce fichier configure la connexion à la base de données MySQL.

<?php
$host = 'localhost';
$dbname = 'FoodDB';
$username = 'root';
$password = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Could not connect to the database $dbname :" . $e->getMessage());
}
?>
Fichier models/Food.php

Ce fichier définit le modèle de données pour un aliment.

<?php
class Food {
    public static function getAll($pdo) {
        $stmt = $pdo->query('SELECT * FROM foods');
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    public static function getById($pdo, $id) {
        $stmt = $pdo->prepare('SELECT * FROM foods WHERE id = ?');
        $stmt->execute([$id]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }

    public static function create($pdo, $name, $type, $emoji) {
        $stmt = $pdo->prepare('INSERT INTO foods (name, type, emoji) VALUES (?, ?, ?)');
        $stmt->execute([$name, $type, $emoji]);
        return $pdo->lastInsertId();
    }

    public static function update($pdo, $id, $name, $type, $emoji) {
        $stmt = $pdo->prepare('UPDATE foods SET name = ?, type = ?, emoji = ? WHERE id = ?');
        return $stmt->execute([$name, $type, $emoji, $id]);
    }

    public static function delete($pdo, $id) {
        $stmt = $pdo->prepare('DELETE FROM foods WHERE id = ?');
        return $stmt->execute([$id]);
    }
}
?>
Fichier controllers/FoodsController.php

Ce fichier gère la logique pour les requêtes liées aux aliments.

<?php
require_once __DIR__ . '/../models/Food.php';

class FoodsController {
    private $pdo;

    public function __construct($pdo) {
        $this->pdo = $pdo;
    }

    public function getAllFoods() {
        return Food::getAll($this->pdo);
    }

    public function getFood($id) {
        return Food::getById($this->pdo, $id);
    }

    public function createFood($data) {
        return Food::create($this->pdo, $data['name'], $data['type'], $data['emoji']);
    }

    public function updateFood($id, $data) {
        return Food::update($this->pdo, $id, $data['name'], $data['type'], $data['emoji']);
    }

    public function deleteFood($id) {
        return Food::delete($this->pdo, $id);
    }
}
?>
Fichier routes/api.php

Ce fichier définit les routes de l'API et dirige les requêtes vers les contrôleurs appropriés.

<?php
require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/../controllers/FoodsController.php';

$controller = new FoodsController($pdo);

$request_method = $_SERVER['REQUEST_METHOD'];
$url = $_GET['url'] ?? '';

// Gestion des routes basée sur le paramètre url du .htaccess
switch (true) {
    case $url === 'foods' && $request_method === 'GET':
        echo json_encode($controller->getAllFoods());
        break;

    case preg_match('/^foods\/(\d+)$/', $url, $matches) && $request_method === 'GET':
        $id = $matches[1];
        $food = $controller->getFood($id);
        echo $food ? json_encode($food) : json_encode(['message' => 'Food not found']);
        break;

    case $url === 'foods' && $request_method === 'POST':
        $data = json_decode(file_get_contents('php://input'), true);
        $id = $controller->createFood($data);
        echo json_encode(['message' => 'Food added successfully', 'id' => $id]);
        break;

    case preg_match('/^foods\/(\d+)$/', $url, $matches) && $request_method === 'PUT':
        $id = $matches[1];
        $data = json_decode(file_get_contents('php://input'), true);
        $controller->updateFood($id, $data);
        echo json_encode(['message' => 'Food updated successfully']);
        break;

    case preg_match('/^foods\/(\d+)$/', $url, $matches) && $request_method === 'DELETE':
        $id = $matches[1];
        $controller->deleteFood($id);
        echo json_encode(['message' => 'Food deleted successfully']);
        break;

    default:
        http_response_code(404);
        echo json_encode(['message' => 'Route not found', 'url' => $url]);
        break;
}
?>
 

Fichier index.php

Ce fichier sert de point d'entrée principal pour l'API.

<?php
header("Content-Type: application/json");
require_once __DIR__ . '/routes/api.php';
?>

 

Fichier .htaccess

Pour une API REST simple, un fichier .htaccess peut être utilisé pour configurer des règles de réécriture d'URL.

<IfModule mod_rewrite.c>
    # Activer la réécriture d'URL
    RewriteEngine On

    # Définir la base pour les réécritures d'URL le repertoire Food est accessible à racine de www
    RewriteBase /Food/back/

    # Règle pour rediriger toutes les requêtes vers index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

 

Conclusion

Vous avez maintenant une API REST simple et bien structurée pour gérer une base de données d'aliments avec des emojis. Cette structure modulaire facilite l'ajout de nouvelles fonctionnalités et la maintenance du code. Vous pouvez tester cette API en utilisant des outils comme Postman ou cURL pour envoyer des requêtes HTTP et interagir avec les données d'aliments.

Last modified: Saturday, 7 June 2025, 6:55 AM