2012-07-20 19 views
5

Tengo la clase Usuario como clase base y luego extendí el Profesor de la clase de usuario.Obteniendo el error "no se puede actualizar el usuario" con symfony2 y la doctrina

Cuando intento acceder me sale este error

No puede actualizar un usuario de la EntityUserProvider que no contiene un identificador. El objeto de usuario debe ser serializado con su propio identificador mapeado por Doctrine .

que tienen la función/deserializar serializar en user.php como he hecho frente que desde FOSUserbundle

public function serialize() 
    { 
     return serialize(array(
      $this->password, 
      $this->salt, 
      $this->usernameCanonical, 
      $this->username, 
      $this->expired, 
      $this->locked, 
      $this->credentialsExpired, 
      $this->enabled, 
     )); 
    } 

no soy capaz de encontrar donde puedo comprobar si hay errores. Estoy atascado. por favor ayuda

Respuesta

4

Desde el code de EntityUserProvider.php parece que usted tiene que serializar id del usuario también.

6
"You cannot refresh a user from the EntityUserProvider that does not contain an identifier. The user object has to be serialized with its own identifier mapped by Doctrine." 

Ésta no es la respuesta a la pregunta, pero si alguien googles el mensaje de error anterior (como yo), este es el primero éxito. Y desde que encontré mi solución, pensé que compartiría.

Recibirá este error si elimina el usuario actual de la base de datos y luego trata de redirigir al usuario. (¡Lo cual puede parecer un error tonto, pero el mensaje de error no ayuda!) La solución es simplemente borrar la sesión antes de redirigir.

$this->get('security.context')->setToken(null); 
$this->get('request')->getSession()->invalidate(); 
+0

¡Gracias! Tenía ese problema exacto; eliminó la entidad de usuario e intentó redirigir a la página de inicio de sesión y obtuvo el error anterior. Busqué en Google el mensaje de error y, ¡voilá! Aterrizó aquí! Tu esfuerzo me salvó una tonelada más. –

+1

Presta atención: para Symfony 2.6+ tienes que usar '$ this-> get ('security.token_storage')'. – hchr

0

Sólo tenían el mismo problema usando class table inheritance, que fue causada por la visibilidad en el set id propiedad a private, por lo que la clase hija no podía acceder el ello, el cambio de este a protected resuelto.

Cuestiones relacionadas