2012-07-17 33 views
6

Thuộc tính nào (và lý do) nên được bao gồm trong các phương thức serialize()deserialize() trong Symfony 2?Thuộc tính nào phải được tuần tự hóa/deserialized trong lớp người dùng Symfony 2?

Đối với bây giờ tôi đã lĩnh vực id và nó chỉ hoạt động, nhưng tôi muốn biết tại sao và những gì là mục đích của serialize() trong User lớp. để tránh thông báo này:

Bạn không thể làm mới người dùng từ EntityUserProvider không chứa số nhận dạng. Đối tượng người dùng phải được tuần tự hóa với mã định danh riêng được ánh xạ bởi 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); 
    } 
} 

Trong khi không thực hiện \Serializable và với tất cả các thuộc tính protected, tôi nhận được:

Symfony \ Component \ Security \ Lõi \ Authentication \ Mã \ UsernamePasswordToken :: serialize() phải trả về một chuỗi hoặc NULL.

Trả lời

4

Bạn cần phải tuần tự hóa/deserialize tên người dùng và các trường bạn sử dụng trong equality check. Bạn không cần phải tuần tự hóa thuộc tính id trừ khi nó có thể được thay đổi trong ứng dụng của bạn.

+0

Cảm ơn bạn đã trợ giúp. Tuy nhiên, không cần tuần tự hóa id (ví dụ: chỉ có tên người dùng), tôi đang nhận được "Bạn không thể làm mới người dùng từ EntityUserProvider không chứa số nhận dạng." ... – gremo

+0

OK. Đó là Doctrine cụ thể sau đó. Bạn nên serialize nó trong trường hợp này. –

+0

Bạn chắc chắn cần id, nếu bạn sẽ không ghi đè lên cách đối tượng người dùng được làm mới. Có vài câu trong tài liệu SF2 về chủ đề này: "Id là giá trị quan trọng nhất cần được tuần tự hóa bởi vì phương thức refreshUser() nạp lại người dùng trên mỗi yêu cầu bằng cách sử dụng id. Trong thực tế, điều này có nghĩa là đối tượng User được tải lại từ cơ sở dữ liệu trên mỗi yêu cầu bằng cách sử dụng id từ đối tượng được tuần tự hóa. Điều này đảm bảo rằng tất cả dữ liệu của Người dùng đều mới. " –

Các vấn đề liên quan