Nie mogę uwierzytelnić w symfony2 z jednostką "Pracownik", ponieważ zawiera wiele map z innymi podmioty w moim projekcie. niektóre z moich map są następujące:Wyjątek: Symfony Component Security Core Authentication Token UsernamePasswordToken :: serialize() musi zwracać ciąg znaków lub 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;
Uwierzytelnianie działa poprawnie bez żadnego mapowania. Próbowałem z 'Serialize()' i 'unserialize() metody w nim jak poniżej:
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);
}
otrzymuję następujący błąd po wykonaniu powyższej metody:
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.
Próbowałem w ten sposób, aby pozbyć się poprzedniego błędu, który przedstawia się następująco:
Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::serialize() must return a string or NULL
więc może ktoś proszę sugerują sposób, aby przezwyciężyć ten problem?
Dziękuję bardzo !!! Bardzo pomocne! – Ben
oszczędziłeś mi wiele czasu na debugowanie, dziękuję –
Myślę, że ten komunikat o błędzie pojawia się, gdy twoja encja użytkownika ma relację, która łączy się z użytkownikiem, np .: 'User-> Article-> Author' (' User' ma wiele 'artykułów 'i' Artykuł' ma 'User' jako autora), a następnie serializacja kończy się niepowodzeniem. Właśnie dlatego, gdy serializuje się 'Użytkownika' używając tylko klucza podstawowego (id) wszystkie rzeczy są wykonywane poprawnie. Tak więc użyj funkcji '__sleep' i zwróć klucz podstawowy. – Dmitriy