Bonjour Toinou,
Je peux vous donner quelques informations.
Votre code ci-dessous est problématique car à chaque à chaque fois que vous utiliserez une requête avec votre fonction query vous allez instanciez une nouvelle connexion.
// models/Database.php
private static function connect() {
$pdo = new PDO("mysql:host=".self::$host.";dbname=".self::$dbName.";charset=utf8",self::$username,self::$password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
}
Je vous conseil de le changer pour qu'il ressemble à cela:
// models/Database.php
class Database {
private static $instance;
// ici les autres attributs
// privée pour ne pas pouvoir instancier d'objet
private function __construct() { /* ne rien faire */ }
private static function connect() {
if (self::$instance == null) {
self::$instance = new PDO("mysql:host=".self::$host.";dbname=".self::$dbName.";charset=utf8",self::$username,self::$password);
self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$instance;
}
public static function query($query, $params = array()) {
self::connect();
$statement = self::$instance->prepare($query);
$statement->execute($params);
if (explode(' ', $query)[0] == 'SELECT') {
$data = $statement->fetchAll();
return $data;
}
}
}
Les changements apportés porte le nom de Pattern Singleton, je vous invite à consulter cette vidéo.
C'est du détail, mais en général le nom des controller porte le nom du model associé, si votre entité s'appel User, appelé votre controller UserController.
Ca vous évite de multiplier les fichiers, sachant que l'apporche MVC est déjà une approche qui les multiplies, on essaiera donc d'avoir le minimum nécessaire (qui sera déjà beaucoup). Dans votre code, je ne vois pas l'utilisation d'une entitée User.
class UserController extends Controller {
public static function getAllUsers() {
self::query("SELECT * FROM users");
}
public static function getUserWithId(integer $id) {
// ...
}
// $request qui contient les données POST réceptionné d'un formulaire
public static function create(Request $request) {
// ...
}
// $request qui contient les données POST réceptionné d'un formulaire
public static function update(Request $request) {
// ...
}
// $id qui contient le numéro de la clé primaire
public static function delete(integer $id) {
// ...
}
}
Votre code ci-dessous est étrange, vous essayer de vérifier si la requête est un SELECT et si c'est le cas vous retournez les enregistrements.
Il est courant de voir cela quand on apprend, mais c'est une très mauvaise façon de faire. Pour mieux comprendre les bonnes pratiques, prenez le temps d'étudier un framework MVC.
public static function query($query, $params = array()) {
// ...
if (explode(' ', $query)[0] == 'SELECT') {
$data = $statement->fetchAll();
return $data;
}
}