2012-07-17 13 views
6

¿Qué propiedades (y por qué) se deben incluir en los métodos serialize() y deserialize() en Symfony 2?¿Qué propiedades tienen que ser serializadas/deserializadas en Symfony 2 User class?

Por ahora he id el campo y que sólo funciona, pero me gustaría saber por qué y cuál es el propósito deserialize()User en clase. con el fin de evitar este mensaje:

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 .

Class User implements AdvancedUserInterface, \Serializable 
{ 
    /** 
    * @return string 
    */ 
    public function serialize() 
    { 
     return serialize($this->id); 
    } 

    /** 
    * @param string $data 
    */ 
    public function unserialize($data) 
    { 
     $this->id = unserialize($data); 
    } 
} 

Aunque sin implementar \Serializable y con todas las propiedades protected, estoy consiguiendo:

Symfony \ Component \ Security \ Core \ autenticación \ Token \ UsernamePasswordToken :: serialize() obligada devolver una cadena o NULL.

Respuesta

4

Necesita serializar/deserializar el nombre de usuario y los campos que usa en el equality check. No necesita serializar la propiedad id a menos que se pueda cambiar en su aplicación.

+0

Gracias por ayudarnos. Sin embargo, sin serializar el ID (por ejemplo, solo el nombre de usuario) me sale "No se puede actualizar un usuario del EntityUserProvider que no contiene un identificador". ... – gremo

+0

Bien. Eso es específico de Doctrine entonces. Deberías serializarlo en este caso. –

+0

Definitivamente necesita identificación, si no va a sobrescribir la forma en que se actualiza el objeto de usuario. Hay pocas frases en la documentación de SF2 sobre este tema: "El ID es el valor más importante que debe ser serializado porque el método refreshUser() recarga al usuario en cada solicitud usando el ID. En la práctica, esto significa que el objeto Usuario se recarga desde la base de datos en cada solicitud usando la identificación del objeto serializado. Esto asegura que todos los datos del usuario estén actualizados ". –