Bonjour à tous,
j'aimerai avoir votre avis sur mon code avant que je ne continue plus loin pour savoir si j'ai mal assimilé les concepts de la POO et du MVC.
J'ai un routeur qui appel mes controlleurs et action de ce type:
Si j'ai bien compris le concept, le contrôleur se charge de faire la liaison entre les modelés et la vue et de ce fait, il ne doit pas y avoir du tout de connexion à la base de donnée dans ma vue. J'ai donc un contrôleur principal qui se charge de passer les données à ma vue via la méthode render()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 DEFINE("GET",$_GET['url']??'/identification'); $router = New \Game\Router\Router(GET); $router->get('/',["action"=>"Game\Controllers\HomeController@show"]); $router->get('/identification',["action"=>"Game\Controllers\UsersController@login"]); $router->get('/deconnexion',["action"=>"Game\Controllers\UsersController@logout"]); $router->post('/identification',[ "action"=>'Game\Controllers\UsersController@login', "post"=>$_POST ]); $router->run();
et notamment avec un extract($datas)Pour ma partie identification par exemple, j'envoie donc les données postées par l'utilisateur à mon UserControlleur qui se charge d'appeler le UserManager pour vérifier la combinaison login/pass et de register ma session si les infos correspondent. ensuite ce contrôleur envoie juste à ma vue l'information pour dire que la vérification login/passe a réussi ou échoué (via $check qui est true ou false).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class Controller { private $viewPath; public function __construct($viewPath) { $this->viewPath = $viewPath; } protected function render(string $page, array $datas=[]) { ob_start(); extract($datas); require "../Game/Views/".$this->viewPath."/".$page.".php"; $content=ob_get_clean(); require "../Game/Views/template/layout.php"; } }
Du côté de ma vue je n'ai plus qu'a afficher le message correspondant et de rediriger vers une autre page en cas de réussite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 class UsersController extends Controller { public function __construct($viewPath='user') { parent::__construct($viewPath); } public function login(array $post=null) { if($post) { $UserManager = \Game\classes\users\UserManager::getInstance(); $check=$UserManager->verifPassword($post); if($check) { Session::getSession()->register($post['login']); } return $this->render('login',["title"=>"SCORE JEUX: identification","check"=>$check]); } return $this->render('login',["title"=>"SCORE JEUX: identification"]); } public function logout() { Session::getSession(); $firstname=$_SESSION['firstname']; $this->render('logout',["title"=>"A bientot $firstname"]); } public function show(array $args) { $this->render('show',$args); } }
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 echo "<h2>Identification</h2>"; if(isset($check) and $check) { if($check) { echo "<div class='alert success'><h4>Bienvenue !</h4><p>Votre identification a réussi. Veuillez patienter SVP...</p></div>"; header("Refresh:3;url=/"); } else { echo "<div class='alert danger'><h4>Connexion refusée !</h4><p>Votre identification a échoué. Merci de vérifier votre combinaison identifiant/mot de passe SVP...</p></div>"; } } $forms=new \Game\classes\html\Form('','POST','userLogin'); $forms->input('Identifiant:','login','login','text'); $forms->input('Mot de passe:','password','password','password'); foreach($forms->show('Se connecter') as $form) { echo $form; }
J'aimerai avoir votre avis sur ce code en terme de sécurité d'une part et en terme de concept POO et MVC.
Ce code fonctionne bien mais comme déjà lu sur les tutos, ce n'est pas parce que ça fonctionne que c'est optimal !
Je n'ai volontairement pas surchargé le message en mettant le code des classes Session, Routeur, Form et UserManager.
D'avance merci pour le temps que vous voudrez bien m'accorder et l'avis constructif que vous pourrez m'apporter.
Partager