# Les recettes des Papis ## Installation - Décompressez l'archive du site. - Pointez votre domaine sur le dossier "public". - Modifiez les fichiers de configuration dans "config". ## Informations pratiques sur le PHP. - Ce site utilise le principe des routes. Afin de ne pas avoir x fichiers publiques identiques pour chaque page. - Tout est géré par le fichier public/index.php. - index.php va charger le Kernel (Noyau) de l'application. - Le noyau fonctionne sur le principe d'élément unique. La méthode ``Kernel::getInstance()`` va permettre d'avoir l'unique instance de la classe Kernel. - Une fois ``Kernel::getInstance()->init()`` déclenché, le noyau enregistre l'autoloading des fichiers, puis enregistre la configuration. - La configuration sont des fichiers dans le dossier config/ qui vont renvoyer un tableau clé/valeur. Exemple ```php // Fichier config/test.php "Val1", 'cle_2' => "Val2", // ... ] ?> ``` - Les fichiers de configuration sont chargés via la méthode ``ConfigFactory::loadConfigFile()`` qui va vérifier si le fichier de configuration existe et le charge en conséquence. - On enchaine ensuite sur le Router. - Le Router est une classe utilitaire qui va permettre de faire le lien entre la route saisie ``/test/...`` de l'utilisateur et les routes enregistrés par le site. - Le Router va d'abord commencer par récupérer la route voulue par l'utilisateur. - Puis, le router va rechercher tous les Controllers existants. - Un Controller est une classe qui va permettre de définir les routes et de dire, qu'est-ce qui se passe quand je prends cette route. Les routes du Controller sont définis par la methode ``Controller::defineRoutes()`` - Pour définir les routes dans la méthode précédente, vous pouvez soit créer un objet ``Route`` en remplissant tous les champs, ou bien la méthode ``Controller::Route()`` qui va préremplir certains champs. - Exemple de Controller ```php class TestController extends Controller { public static function defineRoutes(): array { return [ self::Route( routeUrl: '/test', routeName: "Test", routeAction: "test" ), new Route( routeUrl: "/test2", routeName: "Test2", routeController: "TestController", routeAction: "test2", routeMethods = [ 'GET' ] ) ]; } public function test(){ echo "Je suis déclenché lorsque j'atteinds la route /test"; } public function test2(){ echo "Je suis déclenché lorsque j'atteinds la route /test2 !!!"; } } ``` - Retournons au routeur, pour chercher les controllers, il va scanner les fichiers du dossier src/Domain avec un Iterator Récursif. (Pour se simplifier un peu la tâche.) - Il va traiter le nom du chemin absolu pour obtenir le nom de la classe, puis va vérifier si cette classe est une sous-classe de Controller. - Après avoir trouvé tous les Controllers, il va récupérer toutes les routes de chaque controller. - Enfin, il va vérifier si la route utilisateur correspond à une des routes dans sa liste, si ça correspond, le Router va charger la méthode ``new {RouteController}()->{RouteAction}()`` - Si par exemple, le router trouve la route ``/test`` voulu par l'utilisateur, il va déclencher la méthode ``new TestController()->test()``.