Symfony 在存储库中保存当前用户id

Symfony 在存储库中保存当前用户id,symfony,doctrine-orm,symfony4,symfony2-easyadmin,easyadmin,Symfony,Doctrine Orm,Symfony4,Symfony2 Easyadmin,Easyadmin,我尝试在UserService实体中保存用户字段的初始值。原因是,我在EasyAdminBundle中使用了这个实体,当我构建表单时,我想为user_id(manytone到user entity)设置一个默认值 构造函数中的初始化实体管理器 我重写了save方法 我从安全会话上下文中获取用户,并将其设置为用户服务对象、持久化和刷新 …但在保存期间,我仍然看不到更改 class UserServiceRepository extends ServiceEntityRepository {

我尝试在UserService实体中保存用户字段的初始值。原因是,我在EasyAdminBundle中使用了这个实体,当我构建表单时,我想为user_id(manytone到user entity)设置一个默认值

  • 构造函数中的初始化实体管理器
  • 我重写了save方法
  • 我从安全会话上下文中获取用户,并将其设置为用户服务对象、持久化和刷新
…但在保存期间,我仍然看不到更改

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


}
您正在重写父级中不存在的方法,ServiceEntityRepository和EntityRepository中都没有save方法。那么,您所做的主要工作是什么?为什么要在服务存储库中设置默认用户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\u serviceUserService对象中将当前用户id设置为默认值是一个条令实体?令牌存储的主要思想是通过令牌检索用户并为其恢复会话,但您希望持久化相关对象,对吗。因此,每次启动请求时-都会对您的实体执行写入操作每次我保存user_service时,我希望user_service.user_id等于登录用户的活动用户id。好的,明白了。看看上面的代码,您应该使用prePersist方法为您的UserService实体创建条令事件侦听器
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());
    }
}