在存储库中保存当前用户ID

问题描述 投票:0回答:1

我尝试在UserService实体中保存用户字段的初始值。原因是,我在EasyAdminBundle中使用此实体,当我构建表单时,我想为user_id设置默认值(ManyToOne为User实体)。

  • 构造函数中的init实体管理器,
  • 我重写保存方法。
  • 我从安全会话上下文中获取用户并设置为用户服务对象,持久化和刷新。

......但在保存期间我仍然看不到变化。

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();


}
symfony doctrine-orm symfony4 symfony2-easyadmin easyadmin
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());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.