Сохранение текущего идентификатора пользователя в репозитории

Я пытаюсь сохранить начальное значение для пользовательского поля в объекте UserService. Причина в том, что я использую этот объект в EasyAdminBundle, и когда я создаю форму, я хочу установить значение по умолчанию для user_id (объект ManyToOne to User).

  • инициализировать диспетчер сущностей в конструкторе,
  • Я переопределяю метод сохранения.
  • Я получаю пользователя из контекста сеанса безопасности и устанавливаю объект службы пользователя, сохраняю и очищаю.

... но я все еще не вижу изменений во время сохранения.

class UserServiceRepository extends ServiceEntityRepository
{

protected $_em;

public function __construct(RegistryInterface $registry)
{

    $this->_em = $this->entityManager;

    parent::__construct($registry, UserService::class);
}

// I override save method:
public function save(UserService $userService)
{
    // Get current user from security:
    $user = $this->get('security.token_storage')->getToken()->getUser();
    // set to useService...
    $userService->setUser($user);

        // and persist & flush:
        $this->_em->persist($userService);
        $this->_em->flush();


}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
161
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
// I override save method:

Вы переопределяете несуществующий метод в родительском, нет метода сохранения ни в ServiceEntityRepository, ни в EntityRepository. Итак, в чем суть того, что вы делаете, и почему вы устанавливаете user_id по умолчанию в репозитории службы?

Обновлено:

services:
    my.listener:
        class: UserServiceListener
        arguments:
            - "@security.token_storage"
        tags:
            - { name: doctrine.event_listener, event: prePersist }

Слушатель:

class UserServiceListener
{
    private $token_storage;

    public function __construct(TokenStorageInterface $token_storage)
    {
        $this->token_storage = $token_storage;
    }

    public function prePersist(LifeCycleEventArgs $args)
    {
        $entity = $args->getEntity();

        if (!$entity instanceof UserService) {
           return;
        }

        $entity->setUser($this->token_storage->getToken()->getUser());
    }
}

Спасибо. Я использую easyadminbundle... я определил форму для userservice... мне нужно установить текущий идентификатор пользователя по умолчанию в user_service

tolga 27.03.2019 19:55

Объект UserService является сущностью доктрины? Основная идея хранилища токенов — получить пользователя по токену и восстановить сеанс для него, но вы хотите сохранить связанный объект, я прав. Таким образом, КАЖДЫЙ раз, когда вы инициируете запрос, в вашу сущность будет выполняться операция записи.

alvery 27.03.2019 20:05

Каждый раз, когда я сохраняю user_service, я хочу, чтобы user_service.user_id был равен активному идентификатору пользователя, вошедшего в систему.

tolga 27.03.2019 20:19

Хорошо, понял. Посмотрите на приведенный выше код, вы должны создать прослушиватель событий доктрины с методом prePersist для вашего объекта UserService.

alvery 27.03.2019 20:27

Другие вопросы по теме