86 lines
2.0 KiB
PHP
86 lines
2.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Core;
|
|
|
|
use Database;
|
|
use Session;
|
|
use Response;
|
|
use Request;
|
|
use PDO;
|
|
|
|
/**
|
|
* Classe de base pour tous les controllers
|
|
* Fournit des méthodes communes pour l'authentification et les réponses
|
|
*/
|
|
abstract class Controller {
|
|
protected PDO $db;
|
|
|
|
public function __construct() {
|
|
$this->db = Database::getInstance();
|
|
}
|
|
|
|
/**
|
|
* Vérifier que l'utilisateur est authentifié
|
|
*/
|
|
protected function requireAuth(): void {
|
|
if (!Session::isAuthenticated()) {
|
|
$this->sendError('Non authentifié', 401);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Récupérer les données JSON de la requête
|
|
*/
|
|
protected function getJsonInput(): array {
|
|
return Request::getJson();
|
|
}
|
|
|
|
/**
|
|
* Envoyer une réponse de succès
|
|
*/
|
|
protected function sendSuccess($data = null, int $code = 200): void {
|
|
if ($data === null) {
|
|
Response::json(['status' => 'success'], $code);
|
|
} else {
|
|
Response::json($data, $code);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Envoyer une réponse d'erreur
|
|
*/
|
|
protected function sendError(string $message, int $code = 500): void {
|
|
Response::json([
|
|
'status' => 'error',
|
|
'message' => $message
|
|
], $code);
|
|
}
|
|
|
|
/**
|
|
* Valider qu'un tableau contient les clés requises
|
|
*/
|
|
protected function validateRequired(array $data, array $requiredFields): bool {
|
|
foreach ($requiredFields as $field) {
|
|
if (!isset($data[$field]) || $data[$field] === '') {
|
|
$this->sendError("Le champ '$field' est requis", 400);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Nettoyer et valider un ID
|
|
*/
|
|
protected function validateId($id): ?int {
|
|
if (!is_numeric($id) || $id <= 0) {
|
|
$this->sendError('ID invalide', 400);
|
|
return null;
|
|
}
|
|
return (int) $id;
|
|
}
|
|
} |