Bonjour,
j'aimerai faire appel aux méthodes statiques des classes d'un module (que j'ai développé et pour lesquelles j'utilise un espace de nom détaillé dans le composer.json) à partir d'un autre module.
Pour ce faire je fais bien use NomDeLespaceDeNomDuModule\LaClasseAUtiliser;
Puisque visiblement Prestashop ne trouve pas l'espace de nom du module cible (alors que cela marche très bien de manière interne au module) j'essaie de rendre accessibles ces classes dans des méthodes publiques de ma classe NomDuModule. Ainsi, il serait possible de faire un new NomDuModule(), puis de faire appel à une méthode nomDuModule->maMéthode() qui retourne ce que la classe interne au module aurait retourné.
Hélas, Prestashop nous force à implémenter la classe NomDuModule dans le fichier nomdumodule.php, ce qui n'est pas respectueux des règles de nommage des classes pour l'autoloader qui, pour un new NomDuModule () cherche à inclure un fichier appelé NomDuModule .php et non nomdumodule.php et cela génère une erreur :
(1/1) RuntimeException
Case mismatch between class and real file names: "NomDuModule .php" vs "nomdumodule.php".
Source : https://devdocs.prestashop.com/1.7/modules/creation/module-file-structure/
Si j'essaye de renommer correctement le fichier de la classe principale du module, cela ne fonctionne pas non plus car le module ne veut plus s'installer (il faut absolument que le nom du fichier soit en minuscule).
Je sais qu'il est possible de passer outre l'autoloader en faisant un vieux include_once(), require_once() etc... mais le but ici est d'essayer de respecter un minimum les bonnes pratiques et de ne pas coder comme un chien, donc si quelqu'un a une autre solution que celle-ci je suis preneur .
Merci à vous
P.S. : notez que j'ai modifié le nom du module par nomdumodule mais vous vous en seriez douté.