2012-07-17 9 views
6

Quali proprietà (e perché) devono essere incluse nei metodi serialize() e deserialize() in Symfony 2?Quali proprietà devono essere serializzate/deserializzate in Symfony 2 User class?

Per ora ho il campo id e funziona, ma mi piacerebbe sapere perché e che cosa è lo scopo diserialize() in User classe. al fine di evitare questo messaggio:

Non è possibile aggiornare un utente dal EntityUserProvider che non lo fa contiene un identificatore. L'oggetto utente deve essere serializzato con il proprio identificativo mappato da 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); 
    } 
} 

Mentre senza implementare \Serializable e con tutte le proprietà protected, sto ottenendo:

Symfony \ Component \ Security \ Core \ Autenticazione \ simbolici \ UsernamePasswordToken :: Serialize() must restituisce una stringa o NULL.

risposta

4

È necessario serializzare/deserializzare il nome utente e i campi utilizzati nello equality check. Non è necessario serializzare la proprietà id a meno che non possa essere modificata nella tua app.

+0

Grazie per l'aiuto. Tuttavia senza serializzare l'id (ad esempio solo il nome utente) ricevo "Non è possibile aggiornare un utente da EntityUserProvider che non contiene un identificatore." ... – gremo

+0

OK. Questo è Doctrine specifico allora. Si dovrebbe serializzare in questo caso. –

+0

Hai sicuramente bisogno di id, se non hai intenzione di sovrascrivere il modo in cui l'oggetto utente viene aggiornato. Ci sono poche frasi nella documentazione di SF2 su questo argomento: "L'id è il valore più importante che deve essere serializzato perché il metodo refreshUser() ricarica l'utente su ogni richiesta utilizzando l'id. In pratica, ciò significa che l'oggetto User viene ricaricato dal database su ogni richiesta utilizzando l'id dall'oggetto serializzato, in modo che tutti i dati dell'utente siano freschi. " –

Problemi correlati