Обновление текущего пользователя Symfony пытается СОЗДАТЬ - PullRequest
0 голосов
/ 10 июня 2018

Я настроил Symfony 4 для использования системы входа SAML.Когда пользователь проходит проверку подлинности с использованием SAML, UserFactory получает пользователя из базы данных, если он уже существует, или сохраняется и сбрасывает новую сущность пользователя.

В контроллере Im затем пытается использовать некоторый простой код:

$user = $this->getUser(); // Returns an App\User\Entity object
$user->setFirstName('Test');
$this->em->persist($user);
$this->em->flush(); // Errors here

Но Doctrine рассматривает этого пользователя как новую сущность или выдает ошибку, что некоторые параметры отсутствуют.

Я мог бы просто снова получить пользователя из базы данных, но это означало бы делать это каждыйКогда я захотел использовать текущий объект User, чтобы что-то сделать.

$this->getDoctrine()->getRepository(User::class)->find($this->getUser()->getId())

Возможно, проблема связана с методами сериализации и десериализации в классе пользователя, поскольку эти атрибуты являются единственными доступными вобъект пользователя.

public function serialize()
{
    return serialize(array(
        $this->id,
        $this->firstName,
        $this->lastName,
        $this->email,
        $this->enabled,
        $this->username,
    ));
}

public function unserialize($serialized)
{
    list (
        $this->id,
        $this->firstName,
        $this->lastName,
        $this->email,
        $this->enabled,
        $this->username,
        ) = unserialize($serialized, ['allowed_classes' => false]
    );
}

После аутентификации пользователя они сохраняются в сеансе.$ This-> getUser () - это то, что возвращается из токена безопасности, поэтому я не понимаю, почему это будет отличаться от стандартной аутентификации при входе в систему.

Как я могу обеспечить доступность полного объекта Userчерез $ this-> getUser ()?

1 Ответ

0 голосов
/ 11 июня 2018

Несмотря на то, что у вашего несериализованного пользователя есть идентификатор, Doctrine неизвестно, таким образом, вставка.Чтобы сообщить Doctrine о вашей сущности, вы можете использовать merge (обратите внимание, что он возвращает новый экземпляр сущности).

...