it-swarm.dev

Il metodo non statico JUserHelper :: getProfile () non deve essere chiamato staticamente

Stavo refactoring del codice in un componente precedente e mi sono imbattuto in questo avviso:

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

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

Mentre capisco la natura tecnica dell'avvertimento, poiché getProfile non è dichiarato static, JUserHelper è astratto, quindi non può essere istanziato.

Curiosamente tutti gli altri metodi nella classe sono definiti come static. Mi sembra un bug in 2.5 come in 3.x la firma è diversa.

Qual è il modo corretto di ottenere il profilo?

5
Valentin Despa

È un bug.

Questo problema è stato risolto durante lo sviluppo di J3 come parte di un aggiornamento della piattaforma del 13 luglio 2012 c7c372.

La modifica della piattaforma è stata apportata il 3-lug-2012 99b6ac PR1341 dopo aver inizialmente sollevato l'elemento tracker CMS 28633.

Ringraziamo @valentin per aver sollevato il bug 33717 e aver fornito una patch contro J2.5.

7
Peter Wiseman

Sì, molto probabilmente è un bug nella versione 2.5. La funzione getProfile () in JUserHelper non viene utilizzata in nessun punto della distribuzione di joomla 2.5, quindi il bug potrebbe rimanere incustodito, immagino. Per usarlo come è stato dichiarato ora dovresti sottoclassare la classe JUserHelper, il che non ha davvero senso.

4
jonasfh

È un bug, manca statico http://prntscr.com/3hl3t1

con stampa statica sul posto

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

ritorna

http://prntscr.com/3hl3x7

per ora puoi copiare la funzione e usarla in questo modo

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