ti-enxame.com

O método não estático JUserHelper :: getProfile () não deve ser chamado estaticamente

Eu estava refatorando algum código em um componente mais antigo e me deparei com este aviso:

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

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

Embora eu compreenda a natureza técnica do aviso, como getProfile não é declarado static, JUserHelper é abstrato, portanto não pode ser instanciado.

Curiosamente, todos os outros métodos da classe são definidos como static. Parece-me um bug no 2.5 para mim, pois no 3.x a assinatura é diferente.

Então, qual é a maneira correta de obter o perfil?

5
Valentin Despa

É um bug.

Isso foi corrigido durante o desenvolvimento do J3 como parte de uma atualização da plataforma em 13 de julho de 2012 c7c372.

A alteração da placa foi feita em 3 de julho de 2012 99b6ac PR1341 após o levantamento inicial do item 28633 do rastreador CMS.

Agradecemos a @valentin por aumentar o bug 33717 e fornecer um patch contra o J2.5.

7
Peter Wiseman

Sim, provavelmente é um bug na versão 2.5. A função getProfile () - no JUserHelper não é usada em nenhum lugar da distribuição do Joomla 2.5; portanto, o bug pode ficar sem supervisão, eu acho. Para usá-lo como é declarado agora, você teria que subclassificar a classe JUserHelper, o que realmente não faz sentido.

4
jonasfh

É um erro, estático ausente http://prntscr.com/3hl3t1

com impressão estática no lugar

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

retorna

http://prntscr.com/3hl3x7

por enquanto, você pode copiar a função e usá-la dessa maneira

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