Class not found

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Class not found

    Bonjour,

    je me lance dans l'apprentissage de composant joomla, jusque là je n'ai créé que des modules, j'ai donc épluché la doc Joomla sur la création de composant en commençant avec ce fameux hellowolrd, mais voilà, dès le début petit souci, je n'arrive pas à me servir d'une classe du composant dans mon module.

    Vu la fatal error après avoir créé mon composant a l'aide de la doc, j'ai téléchargé l'archive comp helloworld pour etre sur que l'erreur est légitime, et effectivement, je n'arrive pas à me servir de la class HelloWorldModelHelloWorld que ce soit en ajoutant une fonction public static et en l'appelant ainsi : HelloWorldModelHelloWorld::fonction();
    ou même en extend de ma classe de module comme ceci : MaClassModule extends HelloWorldModelHelloWorld

    Je suppose donc que la réponse (Fatal error: Class 'HelloWorldModelHelloWorld' not found in ***/modules/mod_***/helper.php on line 5) doit etre légitime, mais pourquoi ?

    Il est possible de faire des JFactory::getDBO() n'importe ou alors quelle est la différence ?

    Ma question est surement bête pour beaucoup, désolée.

    Merci d'avance.

  • #2
    Avant d'utiliser une méthode, il faut indiquer à Joomla dans quel fichier php est défini la classe.
    Ceci par un JLoader::register(....

    Regarde par exemple dans /components/com_content/content.php

    Mais c'est vrai pour un module aussi, quand tu appelle une méthode d'un helper d'un composant (cas très fréquent).
    Regarde par exemple /modules/mod_articles_latest/helper.php

    Concernant JFactory c'est une classe statique du framework.
    Le loader calculera le nom du fichier avec le nom de la classe.
    Voir mes explications ici...
    Mais ceci en mode legacy.

    En J5 ce ne sera plus le cas (cela laisse du temps) et il faut utiliser les namespaces.
    Il est préconisé de placer des "use" en début de code (ceci dès à présent).
    Voir mon tableau ici...

    Pour une classe fille, le + simple reste de faire un include_once de la classe mère, si celle ci est décrite dans ton extension.
    Mais ça c'est du classique, pur PHP.
    Dernière édition par roland_d_alsace à 24/04/2019, 11h46
    Minie aime ceci.
    A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
    Rejoignez le Joomla Users Groupe Alsace...
    roland_d_alsace va-t-il devenir roland_du_grand_est ?

    Commentaire


    • #3
      Merci beaucoup pour la réponse très complète.

      en effet en attendant la réponse j'avais fixé avec un include_once.

      mystère résolu, merci beaucoup je vais pouvoir appliquer les bonnes manières

      Commentaire

      Annonce

      Réduire
      Aucune annonce pour le moment.

      Partenaire de l'association

      Réduire

      Hébergeur Web PlanetHoster
      Travaille ...
      X