Почему инъекция EntityManagerInterface возвращает мне ошибку Cannot serialize PhpFilesAdapter - PullRequest
0 голосов
/ 16 октября 2019

У меня есть проблема, с которой я никогда не сталкивался раньше, даже если я делал это в другом проекте. Я попытался внедрить EntityManagerInterface в мою сущность User (чтобы получить что-то в базе данных конфигурации). Поэтому я использовал технику @PostLoad.

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class User implements UserInterface
{
    /** @var EntityManagerInterface $em */
    private $em;
    /**
     * @ORM\PostLoad
     * @ORM\PostPersist
     */
    public function fetchEntityManager(LifecycleEventArgs $args)
    {
        $this->setEntityManager($args->getEntityManager());
    }

    public function setEntityManager($em) {
        $this->em=$em;
    }
}

Я уже делал это в другом проекте, но не в пользовательском объекте, и он работал просто отлично. Но теперь я получаю эту ошибку:

Невозможно сериализовать Symfony \ Component \ Cache \ Adapter \ PhpFilesAdapter

Я думаю, что создание своего рода служебного класса, который может помешать мнеВнедрение entityManagerInterface в мою сущность поможет мне, но я не знаю, какой тип класса мне использовать, может быть, Сервис?

1 Ответ

0 голосов
/ 16 октября 2019

не совсем не связано с вашим вопросом: внедрение менеджера сущностей в сущность указывает на плохой дизайн и не предназначено в формуле Symfony / Doctrine.

причина вашей проблемы в том, что пользователь сериализуется с помощью управления сеансами symfony , и когда он пытается сериализовать достаточно сложный объект / службу, он, вероятно, не сможет этого сделать. Рекомендуется реализовать интерфейс Serializable, чтобы сериализовать только то, что действительно необходимо (см. Ту же ссылку). Что решит эту и другие возможные проблемы, которые вы можете получить. Это также уменьшает размер сеанса, который может увеличиваться по мере роста приложения и присоединения к объекту пользователя. Поскольку пользовательский объект в любом случае загружается при каждом запросе, сериализация чего-либо, кроме упомянутых свойств (снова та же ссылка), просто расточительна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...