web-dev-qa-db-fra.com

La méthode non statique JUserHelper :: getProfile () ne devrait pas être appelée de manière statique

Je refactais du code dans un composant plus ancien et je suis tombé sur cet avertissement:

Strict standards: Non-static method JUserHelper::getProfile() should not be called statically, assuming $this from incompatible context 

$ userProfile = JUserHelper :: getProfile ($ userId);

Bien que je comprenne la nature technique de l'avertissement, étant donné que getProfile n'est pas déclaré static, JUserHelper est abstrait, il ne peut donc pas être instancié.

Curieusement, toutes les autres méthodes de la classe sont définies comme étant static. Pour moi, ça ressemble à un bogue, comme en 3.x, la signature est différente.

Alors, quelle est la bonne façon d'obtenir le profil?

5
Valentin Despa

C'est un bug.

Ce problème a été résolu lors du développement de J3 dans le cadre d'une mise à jour de la plate-forme le 13 juillet 2012, c7c372.

Le changement de plateforme a été effectué le 3 juillet 2012, 99b6ac PR1341, après le lancement initial de l'article 28633 du suiveur de CMS.

Nous remercions @valentin d'avoir provoqué le bogue 33717 et d'avoir fourni un correctif contre J2.5.

7
Peter Wiseman

Oui, c'est probablement un bogue de la version 2.5. La fonction getProfile () de JUserHelper n’est utilisée nulle part dans la distribution joomla 2.5. Le bogue pourrait donc rester sans surveillance, je suppose. Pour l'utiliser tel qu'il est déclaré maintenant, vous devez sous-classer la classe JUserHelper, ce qui n'a aucun sens.

4
jonasfh

C’est un bogue, il manque une statique http://prntscr.com/3hl3t1

avec impression statique en place

$userProfile = JUserHelper::getProfile(42);
print_r( $userProfile );

résultats

http://prntscr.com/3hl3x7

pour le moment, vous pouvez copier la fonction et l'utiliser comme ceci

function MygetProfile($userId = 0)
{
    if ($userId == 0)
    {
        $user   = JFactory::getUser();
        $userId = $user->id;
    }

    // Get the dispatcher and load the user's plugins.
    $dispatcher = JDispatcher::getInstance();
    JPluginHelper::importPlugin('user');

    $data = new JObject;
    $data->id = $userId;

    // Trigger the data preparation event.
    $dispatcher->trigger('onContentPrepareData', array('com_users.profile', &$data));

    return $data;
}
$userProfile = MygetProfile(42);
print_r( $userProfile );
3
Dan