Commentaires
Je te propose que l'on fasse quelque chose de relativement simple et très courant sur les site web, de l'authentification. On va donc créer une table en base de données, qui représente un utilisateur avec ses informations de connexion, je te fournis la requête de création de la table :

{"language":"text/x-sql","content":"CREATE TABLE user(\n \tid INT PRIMARY KEY NOT NULL AUTO_INCREMENT,\n \tmail varchar(255) NOT NULL,\n\tpassword varchar(255) NOT NULL\n)","filename":"User.sql"}


Et maintenant je vais te laisser créer une classe User dans le modèle, le but est qu'elle possède un constructeur vide et une propriété pour chaque colonne de la table avec exactement le même nom.

{"language":"application/x-httpd-php","content":"<?php\n\tclass User\n\t{\n\t\tprivate $id;\n\t\tprivate $mail;\n\t\tprivate $password;\n\t\t\n\t\tpublic function __construct()\n\t\t{\n\t\t\t\n\t\t}\n\t}","filename":"User.php"}


Arthur, l'apprenti développeurMais on est pas sensé utiliser un underscore pour les noms de propriété private?

C'est une bonne pratique en effet, mais ça nous compliquerai les choses, il faudrait revoir complétement le BaseManager pour gérer cette transition de nom avec underscore dans les classes et sans dans les colonnes de table. D'autre part, le FEtCH_CLASS ne fonctionnerai pas aussi simplement car il ne trouverais pas les propriétés associées aux colonnes. Pour faire simple cette fois, je te propose que l'on mette ces propriétés en public. Mais garde à l'esprit que l'on pourrait choisir d'approfondir ce point pour mettre en place un mapping table/objet qui gérerait cette transformation et nous premettrais d'avoir les propriétés en private avec les accesseurs associés.

Arthur, l'apprenti développeurD'accord, mais il faudra que tu me montres ça un jour !

Avec plaisir, mais une autre fois, car ça nous demandera pas mal de temps à mettre en place. Met donc la classe à jour.

{"language":"application/x-httpd-php","content":"<?php\n\tclass User\n\t{\n\t\tprivate $id;\n\t\tprivate $mail;\n\t\tprivate $password;\n\t\t\n\t\tpublic function __construct()\n\t\t{\n\t\t\t\n\t\t}\n\t}","filename":"User.php"}


Très bien, je te propose d'enregistrer ce fichier dans un nouveau dossier Entite que tu places dans le dossier Model. Et tu peux aussi créer en même temps un autre dossier Manager lui aussi dans le Model. Et maintenant la magie va se faire, tu va créer une nouvelle classe UserManager dans ce nouveau dossier, cette classe doit hériter de BaseManager, et rappelle toi qu'il faudra appeller le constructeur parent en lui passant trois paramètres, qui sont le nom de la table, le nom de la classe associé et la source de données, tu recevra ce dernier dans les paramètre du constructeur.

Arthur, l'apprenti développeurOk je vois !

{"language":"application/x-httpd-php","content":"<?php\n\tclass userManager extends BaseManager\n\t{\n\t\tpublic function __construct($datasource)\n\t\t{\n\t\t\tparent::__construct(\"user\",\"User\",$datasource);\t\n\t\t}\n\t}","filename":"UserManager.php"}


Arthur, l'apprenti développeurC'est bien ça?

Oui c'est tout à fait ça.

Arthur, l'apprenti développeurEt maintenant on fait les requêtes?

Quelles requêtes?

Arthur, l'apprenti développeurEt bien le CRUD avec getById, getAll et le reste, il faut bien les refaire ici?

Et bien non, ta classe UserManager a déjà toutes ces méthodes pour réaliser ces requêtes étant donné qu'elles sont définit dans la classe dont le manager hérite.

Arthur, l'apprenti développeurAh oui? Mais ... c'est génial !

Oui c'est très pratique, par contre il faut garder à l'esprit que ces cinq méthodes de base sont très génériques, il est possible que dans certains cas, nous ayons besoin de requête plus spécifique, dans ce cas, on pourra soit surcharger les méthodes dans notre manager pour qu'elles soient executer à la place de la méthode parente, soit en écrire de nouvelles avec une requête plus spécifique à notre besoin. Par exemple pour s'authentifier, nous allons avec besoin d'une requête qui recherche un utilisateur par son mail, et non pas son id.

Arthur, l'apprenti développeurJe pense que j'ai compris, je vais faire ça.

{"language":"application/x-httpd-php","content":"<?php\n\tclass userManager extends BaseManager\n\t{\n\t\tpublic function __construct($datasource)\n\t\t{\n\t\t\tparent::__construct(\"user\",\"User\",$datasource);\t\n\t\t}\n\t\t\n\t\tpublic function getByMail($mail)\n\t\t{\n\t\t\t$req = $this->_bdd->prepare(\"SELECT * FROM user WHERE mail=?\");\n\t\t\t$req->execute(array($mail));\n\t\t\t$req->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,\"User\");\n\t\t\treturn $req->fetch();\n\t\t}\n\t}","filename":"UserManager.php"}


Parfait, maintenant on va voir comment gérer ces manager. J'ai terminé cette partie
Demander de l'assistance