2012-07-17 21 views
6

Symfony 2中的serialize()deserialize()方法應包含哪些屬性(以及爲什麼)?哪些屬性必須在Symfony 2用戶類中進行序列化/反序列化?

現在我的id領域,它只是工作,但我想知道是什麼原因,什麼是在User類的serialize()目的。以避免此消息:

您不能從EntityUserProvider刷新不包含標識符的 的用戶。用戶對象必須使用由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); 
    } 
} 

雖然沒有實現\Serializable,並與所有屬性protected,我越來越:

的Symfony \分量\安全\核心\認證\令牌\ UsernamePasswordToken ::連載() 絕返回一個字符串或NULL。

回答

4

您需要序列化/反序列化您在equality check中使用的用戶名和字段。除非可以在應用程序中對其進行更改,否則不需要序列化id屬性。

+0

感謝您的幫助。但是,如果沒有序列化id(例如,只有用戶名),我會收到「您無法從EntityUserProvider刷新不包含標識符的用戶。」... – gremo 2012-07-18 07:54:42

+0

好的。那就是具體的教義。在這種情況下,你應該序列化它。 – 2012-07-18 11:31:55

+0

如果您不打算覆蓋刷新用戶對象的方式,您肯定需要id。關於此主題的SF2文檔中有幾句話:「id是需要序列化的最重要的值,因爲refreshUser()方法通過使用id在每個請求上重新加載用戶。實際上,這意味着User對象使用來自序列化對象的ID從每個請求的數據庫中重新加載,這確保了所有用戶的數據都是新鮮的。「 – 2014-06-08 22:37:45

相關問題