Le modèle MVC va permettre de clarifier la situation :
Le fichier index sert de routeur qui va créer le bon contrôler qui va lui même faire appel au modèle (les données) puis à la vue.
Paquet http-foundation
cf : https://packagist.org/packages/symfony/http-foundation
Il est tout à fait possible de se passer de paquets tiers pour mettre en place une achitecture MVC mais je choisis ici d'utiliser le paquet http-foundation de symfony car c'est l'occasion de s'initier à ce framework qui est un incontournable depuis plusieurs années.
http-foundation va principalement nous permettre :
- d'accéder aux requêtes (Request) des internautes
- de renvoyer des réponses (Response).
Anatomie d'une requête HTTP
Une requête http est composée :
- d'une entête générale (que ce soit une requête ou une réponse)
Ex d'entête générale :Cache-Control: no-cache, private Connection: close Content-Length: 272 Content-Type: application/json Date: Fri, 25 Sep 2020 09:12:42 GMT Server: Apache/2.4.29 (Ubuntu)
-
d'une entête spécifique à la requête ou à la réponse. Ex d'entête de requête :
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7 Cache-Control: max-age=0 Connection: keep-alive Host: local.mvc.my Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36
- du corps de la requête qui est compris dans le "payload". Ex de corps en post lorsque l'on renseigne un formulaire d'identification :
{name: "bob", pass: "542587155DiidO:;"}
Paquet routing
cf https://packagist.org/packages/symfony/routing
Comme son nom l'indique, le paquet /symfony/routing va nous permettre de gérer les routes. C'est l'occasion de définir ce qu'est une route :
Dans le paradigme du développement web, les routes sont les mécanismes qui permettent de savoir vers quel code le fil d'éxécution doit renvoyer en fonction de la requête HTTP qui est envoyée au serveur.
Installation
composer require symfony/http-foundation composer require symfony/routing
Première version de notre fichier de "routing"
Le fichier index.php que vous voyez ci-dessous nécessite que vous ayez mis en place :
-
le mécanisme d'autoloading
"autoload": { "psr-4": { "Src\\": "src/" } }
- la classe Controller dans Src\controller
<?php require '../vendor/autoload.php'; use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\RequestContext; use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Exception\ResourceNotFoundException; use Src\Controller; try { // Init basic routes $home_route = new Route( '/', array('controller' => 'HomeController') ); // Add Route object(s) to RouteCollection object $routes = new RouteCollection(); $routes->add('home_route', $home_route); // Init RequestContext object $context = new RequestContext(); $context->fromRequest(Request::createFromGlobals()); // Init UrlMatcher object $matcher = new UrlMatcher($routes, $context); // Find the current route $parameters = $matcher->match($context->getPathInfo()); /** * Appel du controler avec les bons paramètres : * - le nom de la route * - le nom du contrôleur impliqué */ //var_dump($parameters); $controller = new Controller($parameters); exit; } catch (ResourceNotFoundException $e) { echo $e->getMessage(); }