Commentaires
Je te laisse commencer, et quand tu as des questions tu me présente ton code en précisant la question.

Arthur, l'apprenti développeurD'accord, je vais faire le contrôleur pour commencer.

{"language":"application/x-httpd-php","content":"<?php\n\tclass UserController extends BaseController\n\t{\n\t\tpublic function Login()\n\t\t{\n\t\t\t$this->View(\"login\");\n\t\t}\n\t\t\n\t\tpublic function Authenticate($login,$password)\n\t\t{\n\t\t\t\n\t\t}\n\t}","filename":"UserController.php"}



Arthur, l'apprenti développeurEt la vue login avec un formulaire

{"language":"application/x-httpd-php","content":"<form class=\"login-form\" action=\"Login\" method=\"post\"> \n\t<label>Identifiant</label>\n\t<input type=\"text\" name=\"login\" />\n\t<label>Mot de passe</label>\n\t<input type=\"password\" name=\"password\" />\n\t<input type=\"submit\" value=\"Se connecter\" />\n</form>","filename":"login.php"}


Arthur, l'apprenti développeurMaintenant je ne sais pas comment récupérer login et password dans mon action... J'ai mis les paramètres mais je dois modifier quoi pour les transmettre?

Ajoute un var_dump($login,$password) dans ton action authenticate, et ouvre ton formulaire sur un navigateur, renseigne les champs et poste le.

{"language":"application/x-httpd-php","content":"<?php\n\tclass UserController extends BaseController\n\t{\n\t\tpublic function Login()\n\t\t{\n\t\t\t$this->View(\"login\");\n\t\t}\n\t\t\n\t\tpublic function Authenticate($login,$password)\n\t\t{\n\t\t\tvar_dump($login,$password);\n\t\t}\n\t}","filename":"UserController.php"}


Arthur, l'apprenti développeurJ'ai une erreur...



Et oui, on a oublié un détail, on a prévu une méthode bindParam dans HttpRequest, mais on ne l'a appelé nul part... Il faudrait l'appeler pour ajouter ces paramètres. Saurais tu me dire où ce serait le plus pertinent?

Arthur, l'apprenti développeurAprès que l'on ait trouvé la route, mais avant de l’exécuter. Donc je dirais dans l'index.

Effectivement, on pourrait le faire dans l'index, mais je te propose plutôt de le mettre dans la méthode run de HttpRequest juste avant de faire le run de la route. Ce sera idéal à cet endroit là.

Ok je fais ça.

{"language":"application/x-httpd-php","content":"<?php\n\tclass HttpRequest\n\t{\n\t\tprivate $_url;\n\t\tprivate $_method;\n\t\tprivate $_param;\n\t\tprivate $_route;\n\t\t\n\t\tpublic function __construct($url = null, $method = null)\n\t\t{\n\t\t\t$this->_url = (is_null($url))?$_SERVER['REQUEST_URI']:$url;\n\t\t\t$this->_method = (is_null($method))?$_SERVER['REQUEST_METHOD']:$method;\n $this->_param = array();\n\t\t}\n\t\t\n\t\tpublic function getUrl()\n\t\t{\n\t\t\treturn $this->_url;\t\n\t\t}\n\t\t\n\t\tpublic function getMethod()\n\t\t{\n\t\t\treturn $this->_method;\t\n\t\t}\n\t\t\n\t\tpublic function getParams()\n\t\t{\n\t\t\treturn $this->_params;\t\n\t\t}\n\t\t\n\t\tpublic function setRoute($route)\n\t\t{\n\t\t\t$this->_route = $route;\t\n\t\t}\n\t\t\n\t\tpublic function bindParam()\n\t\t{\n\t\t\tswitch($this->_method)\n\t\t\t{\n\t\t\t\tcase \"GET\":\n\t\t\t\tcase \"DELETE\":\n\t\t\t\t\tforeach($this->_route->getParam() as $param)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(isset($_GET[$param]))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$this->_param[] = $_GET[$param];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tcase \"POST\":\n case \"PUT\":\n\t\t\t\t\tforeach($this->_route->getParam() as $param)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(isset($_POST[$param]))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$this->_param[] = $_POST[$param];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t}\n }\n\n public function getRoute()\n {\n return $this->_route;\n }\n \n public function getParam()\n\t\t{\n\t\t\treturn $this->_param;\t\n }\n \n\t\tpublic function run($config)\n {\n $this->bindParam();\n $this->_route->run($this,$config);\n }\n\n public function addParam($value)\n {\n $this->_param[] = $value;\n }\n\t}","filename":"HttpRequest.php"}


Recharge ta page dans ton navigateur maintenant.



Arthur, l'apprenti développeurC'est génial j'ai mes paramètres déjà présent dans mon action sans rien faire !

Et oui, on l'avais prévu dans le framework pour qu'il nous gère ça tout seul, donc ça fonctionne tout seul.Il ne te reste plus qu'à appeler le manager, qui est une des propriétés de ton contrôleur, et sa méthode getByMail pour vérifier si le login existe en base de données. Tu place le résultat dans une variable $user et tu change le var_dump pour afficher cette variable.

{"language":"application/x-httpd-php","content":"<?php\n\tclass UserController extends BaseController\n\t{\n\t\tpublic function Login()\n\t\t{\n\t\t\t$this->view(\"login\");\n\t\t}\n\t\t\n\t\tpublic function Authenticate($login,$password)\n\t\t{\n\t\t\t$user = $this->UserManager->getByMail($login);\n\t\t\tvar_dump($user);\n\t\t}\n\t}","filename":"UserController.php"}


Arthur, l'apprenti développeurJ'ai testé j'ai encore une erreur, il ne trouve pas la classe UserManager.

Tu as vérifié les dossiers configurés pour l'autoload?

Arthur, l'apprenti développeurAh non !

{"language":"application/json","content":"{\n\t\"autoloadFolder\": [\n\t\t\"Framework\",\n\t\t\"Controller\",\n\t\t\"Model\",\n\t\t\"Framework/Exception\",\n\t\t\"Model/Manager\",\n\t\t\"Model/Entite\"\n\t],\n\t\"database\": {\n \"name\": \"Ma base de données\",\n \"dbname\": \"database\",\n \"host\": \"localhost\",\n \"user\": \"user\",\n \"password\": \"pwd\"\n\t},\n\t\"basepath\" : \"/mvc-php\"\n}","filename":"config.json"}


Arthur, l'apprenti développeurj'ai ajouté Manager et Entite

Et bien cette fois repasse par ton formulaire, mais entre un mail qui est présent dans la base de données.



Arthur, l'apprenti développeurOh oui ça fonctionne je récupère bien mon utilisateur en objet !

Voilà, il ne reste qu'une chose à faire dans le contrôleur, si tu récupère un User et que le mot de passe est le bon, tu peux afficher une vue pour précisé qu'il est bien connecté, sinon une vue d'erreur. Mais il n'y a plus rien de sorcier dans tout ça pour toi normalement, maintenant c'est à toi de jouer, créer tes contrôleurs, action, modèles et vue pour ton application. Nous avons terminé !

Arthur, l'apprenti développeurMerci beaucoup, je vais pouvoir faire mon site, mais je pense que je reviendrais te voir très bientôt pour te poser pleins d'autres questions !

Avec plaisir Arthur. J'ai terminé cette partie
Demander de l'assistance