Tôi không thể xác thực trong symfony2 với thực thể 'Employee' vì nó chứa nhiều ánh xạ với nhau thực thể trong dự án của tôi. một số ánh xạ của tôi như sau:Ngoại lệ: Symfony Component Security Core Xác thực Token UsernamePasswordToken :: serialize() phải trả về một chuỗi hoặc NULL
/**
* @var EmployeeDesignation
*
* @ORM\ManyToOne(targetEntity="EmployeeDesignation")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="employee_designation_id", referencedColumnName="id")
* })
*/
private $employeeDesignation;
/**
* @var EmployeeDesignation
*
* @ORM\ManyToOne(targetEntity="EmployeeType")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="employee_type_id", referencedColumnName="id")
* })
*/
private $employeeType;
Xác thực hoạt động tốt mà không cần ánh xạ. Tôi đã thử với 'Serialize()' và 'unserialize()' phương pháp trong nó như dưới đây:
class Employee implements AdvancedUserInterface, \Serializable{
/**
* serialize the username
* @return serialize
*/
public function serialize() {
return serialize($this->emailOfficial);
}
/**
* unserialize
* @param $data
*/
public function unserialize($data) {
$this->em = unserialize($data);
}
Tôi nhận được lỗi sau sau khi thực hiện phương pháp trên:
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.
Tôi đã cố gắng theo cách này để loại bỏ lỗi trước đó, như sau:
Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::serialize() must return a string or NULL
Vì vậy, bất kỳ ai cũng có thể đề xuất cách khắc phục sự cố này?
Cảm ơn bạn rất nhiều !!! Rất hữu ích! – Ben
bạn đã lưu cho tôi rất nhiều thời gian gỡ lỗi, cảm ơn –
Tôi nghĩ thông báo lỗi này xuất hiện khi thực thể người dùng của bạn có quan hệ liên kết ngược với người dùng, ví dụ: 'User-> Article-> Author' (' User' có nhiều 'Bài viết 'và' Article' có 'User' là tác giả) sau đó serialization thất bại. Thats lý do tại sao khi bạn serialize 'User' chỉ sử dụng khóa chính (id) tất cả mọi thứ được thực hiện đúng. Vì vậy, hãy sử dụng hàm '__sleep' và trả về khóa chính ở đó. – Dmitriy