Jump to content

Module front controller... WTF ?


Recommended Posts

Bonjour,

Sur la doc de Prestashop concernant les front controllers de module je suis assez perplexe : https://devdocs.prestashop.com/1.7/modules/concepts/controllers/front-controllers/

Il est expliqué qu'on doit créer une classe "exemple.php" contenant une classe dont le nom est charté NomDuModuleNomDuFIchierModuleFrontController. Ce fichier sera situé dans le dossier du module dans controllers/front et non sans src/Controllers par exemple.

Rien qu'à cet endroit, je ne comprends pas pourquoi le fichier n'a pas le nom de la classe, pourquoi il n'est pas dans un dossier qui respecte les règles PSR et je me demande comment va-t'on faire pour gérer l'autoloader !

Ce contrôleur créé doit utiliser les méthodes de la classe qu'il étend : ModuleFrontController soit initContent pour get et postProcess pour POST et l'adresse serait générée par la méthode

Context::getContext()->link->getModuleLink(nomDuModule, 'nomDuFichier');

Quid du fichier config/routes.yml ? Comment ajouter de nouvelles méthodes sensées juste renvoyer une JsonResponse pour un appel ajax tout simple par exemple.

Je suis assez perplexe et cette page de doc pourtant actuelle me semble très archaïque et à l'opposé de l'intégration de Symfony dans Prestashop alors qu'un front controller de module me semble assez utilisé pour les développeurs de modules....

Merci à vous d'éclairer ma lanterne au cas où il y aurait une nouvelle manière de faire comme pour les contrôleurs admin https://devdocs.prestashop.com/1.7/modules/concepts/controllers/admin-controllers/

  • Like 1
Link to comment
Share on other sites

Symfony n’est pas disponible sur le front, tu dois forcément utiliser le legacy de PrestaShop.

Donc les vieilles méthodes dont tu parles ainsi que l’autoload legacy de PrestaShop qui fonctionne très bien malgré les nom de fichiers qui ne correspondent pas à la classe.

Pour l’ajax c’est degueulasse, tu dois utiliser le fonction ajaxDie du controller avec un json_encode. Rien n’empêche de bidouiller un truc plus sexy en utilisant des dépendances mais bon ça prend plus de temps. 

D’ailleurs tu ne dois pas utiliser de namespace, tout reste dans le namespace global.

En gros tu ne dois utiliser de namespace que dans ton dossier src et/ou vendor si tu as des dépendances.

En général, je déplace toute la logique applicative dans src et le legacy du namespace global se charge d’utiliser mon code dans src

  • Like 1
Link to comment
Share on other sites

3 hours ago, Janett said:

Symfony n’est pas disponible sur le front, tu dois forcément utiliser le legacy de PrestaShop.

Donc les vieilles méthodes dont tu parles ainsi que l’autoload legacy de PrestaShop qui fonctionne très bien malgré les nom de fichiers qui ne correspondent pas à la classe.

Pour l’ajax c’est degueulasse, tu dois utiliser le fonction ajaxDie du controller avec un json_encode. Rien n’empêche de bidouiller un truc plus sexy en utilisant des dépendances mais bon ça prend plus de temps. 

D’ailleurs tu ne dois pas utiliser de namespace, tout reste dans le namespace global.

En gros tu ne dois utiliser de namespace que dans ton dossier src et/ou vendor si tu as des dépendances.

En général, je déplace toute la logique applicative dans src et le legacy du namespace global se charge d’utiliser mon code dans src

Ouais du coup c'est ce que j'ai fait.. Même l'utilisation du ajaxDie est marquée comme deprecated ça craint. Une idée de date/version de l'implémentation de Symfony sur le front à tout hasard ? Merci pour ta réponse en tout cas

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...