Bonjour,
Je suis entrain de développer un site sur le jeu Euro Truck Simulator 2 en MVC (sans framework).
J'aurais une petite question, je souhaite faire un système de module afin d'ajouter de nouvelles fonctionnalités facilement et rapidement.
J'ai déjà une petite idée de comment faire : un fichier JSon (toute la config du site est géré avec du JSon, facile à utiliser et a écrire d'où ce choix ;) ) listant les modules installés et activés. A chaque fois qu'on va sur le site, ce dernier va donc lire cette configuration et charger les dits modules (un peu comme le fait Symfony sauf que pour ce dernier on ne peut désactiver qu'en supprimant la ligne d'appel donc il faut modifier le code pour plus utiliser un bundle, pas terrible je trouve). Ce système me permet donc via l'administration, d'activer/désactiver les différents modules.
Voilà donc ma question : est-ce qu'on peu dans une classe parente, récupéré des informations provenant de la classe enfant ? Il me semble que je l'avais fais en récupérant le nom de la classe enfant, mais je sais plus comment on fait ça et je trouve pas sur le net.
Pourquoi est-ce que je veux faire ça ?
Petite explication :
Je ne veux pas d'une dépendance dans le code, en clair je souhaite faire comme avec Wordpress : modifier une page (par exemple) sans modifier le code de la dite page. En gros avec Wordpress, on peut très bien créer un plugin qui apporte de nouveaux widget quand on poste un message, et un autre plugin qui va modifier ce dit widget voir lui adjoindre un autre widget (je me souviens qu'à Eoxia je l'ai fait ça dans Wordpress).
Ainsi, je souhaite donc qu'un module puisse intéragir sans qu'on ai besoin de faire explicitement appel à lui dans un autre code. Voilà un peu l'idée.
Pour être plus précis et donner un exemple, j'en suis à faire le module de news pour mon site, il me faut donc créer mon système de module (c'est prévu dès ce week-end), mais voilà alors que les news seront affichées sur la page d'accueil, si demain je souhaite que ce ne soit plus les news mais par exemple la liste des 5 derniers messages du forum, ben je veux pouvoir le faire sans aller modifier le code du controller de la page d'accueil (ou son template), ce qui permet alors via l'administration de gérer ce genre de choses (tout est prévu à la gestion via l'admin, le site sera très modulaire).
J'ai donc penser au système d'observé-observateur (le design-pattern Observer), je me disais qu'avec, les pages (controller comme template, ça pourrais se faire aussi avec les entités en théorie lol) qui seraient prévus pour pouvoir avoir des modules qui s'y greffe, seraient donc observés, les modules étant donc observateurs.
A partir de là, un fichier de configuration JSon (services.json par exemple), indiquerais donc les observés et les observateurs à greffer, du coup à l'utilisation de l'observé, il ferait un notify (par exemple) pour informer ses observateurs, ces derniers alors pourraient par exemple afficher leur template (pour reprendre mon exemple des news et des 5 derniers posts du forum).
Par rapport à mon exemple de tout à l'heure, je pourrais donc sans toucher au code de IndexController, afficher les news ou les 5 derniers posts du forum (voir les deux) suivant ce qui est indiqué dans l'administration (ici dans services.json correspondant à IndexController).
Sauf que pour éviter de devoir taper obligatoirement du code particulier dans chaque controller, j'aurais voulut que ça soit inclus directement dans le controller générique dont tous héritent (d'où la question de tout à l'heure).
Si vous savez me répondre à mes quelques questions, et ceux qui auraient des idées pour améliorer ce que je veux faire je suis preneur bien entendu (surtout toi GrafikArt, je sais que tu es d'une aide précieuse ;) ).
Merci d'avance et bonne après-midi à tous.