Optimisation des accès JFactory::getUser();

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

  • Optimisation des accès JFactory::getUser();

    Bonjour,
    Excusez ces questions d'un vieux développeur né à l'ère procédurale et a appris la programmation objet sur le tas (tard).

    Tous les composants d'un site joomla ont généralement besoin d'accéder à l'utilisateur logué. Ceci se fait généralement à l'aide de :

    Code:
    $user = JFactory::getUser();
    Qui donne accès à tous les paramètres Joomla.
    Depuis php7 une notice est donnée si on fait une affectation par référence ($user =& JFactory::getUser()). Ma première question est de savoir si JFactory::getUser() renvoit bien une référence ou si l'objet entier est renvoyé à chaque appel ?

    2eme question : un accès à la BDD est-il fait à chaque appel JFactory::getUser() ou Joomla renvoit-il une ressource qu'il a en cache ?

    3eme question : si un composant ou autre extension gère des paramètres supplémentaires liés à l'utilisateur la première solution qui me vient est de créer une surchage de userTable:

    Code:
    class extensionModelUser extends UserTable
    {
    ...
        public function load(){
            $user = JFactory::getUser();
            $this->load_extra_params(); //Accès BDD aux paramètres utilisateurs
    ...
    }
    
    //Toutes les extensions joomla peuvent alors accéder aux paramètres de cette extension:
    $extended_user = new extensionModelUser();
    $extended_user->load();
    Mais alors chaque nouvel appel à $extended_user->load() génère un accès BDD pour des paramètres qu'on a déjà chargés. Quelle est la bonne manière d'éviter cela ?

    Merci pour vos réponses
    Thierry CHEN
    http://www.webologix.com

  • #2
    Re-bonjour Thierry,

    Si vous regardez dans les sources de Factory (librairies/src/Factory.php) et de User (librairies/src/USer/User.php), vous trouverez toutes vos réponses.

    getUser cherche dans la session si l'utilisateur existe déjà. Il va récupérer une instance de User en vérifiant s'il peut récupérer ces informations à partir du cache (fonction getInstance de la classe User).

    Je pense que cela répond à vos 2 premières questions.

    Concernant la 3éme, je ne suis pas sûr de comprendre, mais, sauf erreur de ma part, cela semble correspondre soit au fonctionnement des zones profiles, soit aux custom fields et je ne vois pas la nécessité de passer par une surcharge.

    Pascal
    Dernière édition par pmleconte à 30/11/2019, 18h15
    If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

    Commentaire


    • #3
      Zones profiles ? Qu'est ce que c'est ?
      Oui, effectivement les customs fields seraient la meilleure solution. Mais ils sont apparus après que j'ai utilisé la surcharge. Il faudrait revoir tous mes scripts...

      je me demandais s'il existait un genre de "surcharge" qui modifierait la méthode load() de joomla elle même. C'est à dire qu'un appel à userTable->load() executerait
      extensionModelUser->load() (>
      Thierry CHEN
      http://www.webologix.com

      Commentaire


      • #4
        Les "profiles" sont des zones supplémentaires pour les formulaires d'enregistrement.

        Cela crée des zones dans la base de données (table user_profiles) et c'est créé/affiché/géré par Joomla et ses/vos plugins.

        Il y a une dizaine de zones "profiles" prévues dans le plugin profil de base (adresse, ville, région, pays, code postal, ville....) et on peut facilement en ajouter d'autres (via des plugins personnalisés : voir https://docs.joomla.org/Creating_a_profile_plugin/fr).

        Et si cela ne suffit pas, il y a les Custom Fields.

        Concernant la modification de model (si j'ai bien compris votre question), il y a une extension qui permet de surcharger tout ce que l'on veut : voir https://docs.joomla.org/How_to_overr...e_Joomla!_core qui vous enverra sur https://gruz.ml/en/extensions/mvcove...#documentation

        Attention: c'est du lourd et à réserver aux experts qui savent ce qu'ils font/risquent...

        Pascal
        If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

        Commentaire

        Annonce

        Réduire
        Aucune annonce pour le moment.

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X