it-swarm-es.tech

El método no estático JUserHelper :: getProfile () no debe llamarse estáticamente

Estaba refactorizando algún código en un componente anterior y encontré esta advertencia:

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

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

Si bien entiendo la naturaleza técnica de la advertencia, ya que getProfile no se declara static, JUserHelper es abstracta, por lo que no se puede instanciar.

Curiosamente, todos los demás métodos de la clase se definen como static. A mí me parece un error en 2.5, ya que en 3.x la firma es diferente.

Entonces, ¿cuál es la forma correcta de obtener el perfil?

5
Valentin Despa

Es un error.

Esto se solucionó durante el desarrollo de J3 como parte de una actualización de la plataforma el 13 de julio de 2012 c7c372.

El cambio de plataforma se realizó el 3 de julio de 2012 99b6ac PR1341 después de plantear inicialmente el elemento de seguimiento CMS 28633.

Gracias a @valentin por generar el error 33717 y proporcionar un parche contra J2.5.

7
Peter Wiseman

Sí, probablemente sea un error en la versión 2.5. La función getProfile () - en JUserHelper no se usa en ninguna parte de la distribución joomla 2.5, por lo que el error podría quedar desatendido, supongo. Para usarlo como se declara ahora, tendría que subclasificar la clase JUserHelper, lo que realmente no tiene sentido.

4
jonasfh

Es un error, falta estática http://prntscr.com/3hl3t1

con impresión estática en el lugar

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

devoluciones

http://prntscr.com/3hl3x7

por el momento puedes copiar la función y usarla así

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