Bruno G Posted February 20, 2020 Share Posted February 20, 2020 (edited) 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é. Edited February 20, 2020 by Bruno G (see edit history) Link to comment Share on other sites More sharing options...
fbenoist.com Posted February 20, 2020 Share Posted February 20, 2020 Bonjour, Vous ne pouvez pas utiliser de namespace dans la classe principale d'un module. Donc, si vous voulez utiliser un namespace et l'autoload de composer; vous devez créer une autre classe dans le répertoire src de votre module. Sinon vous devez utiliser include_once ou require_once. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now