在 FormType Symfony4 中获取 $this->getUser()

get $this->getUser() in FormType Symfony4

我有一个名为配置文件的实体,与类别有关系。两者都在 company_id.

范围内

当我创建一个新的配置文件时,我只想显示我的 company_id 中可能的类别。

CategoryRepository 有以下方法:

/**
    * @return Category[] Returns an array of Category objects
    */
    public function findByCompany($value)
    {
        dump($value);
        return $this->createQueryBuilder('p')
            ->where('p.company = :val')
            ->setParameter('val', $value)
            ->getQuery()
            ->getResult()
        ;
    }

当从类别索引中使用时,该方法可以正常工作,其中列出了我的公司类别。

但是,不是,在创建个人资料时,我需要获得关系。

ProfileType形式如下:

$builder
    ->add('name')
    ->add('type')
    ->add('serial')
    ->add('sgin')
    ->add('sensor', EntityType::class, [
        'class'=>'App\Entity\Sensor',
        'choice_label' => 'name',
    ])
    ->add('category', EntityType::class, [
        'class'=>'App\Entity\Category',
        'choice_label' => 'name',
        'query_builder' => function (CategoryRepository $er) use($user) {
            return $er->findByCompany($user);
        },
    ])

据我所知,这里的 $user 应该包含 $this->getuser() (因为我可以从中调用 getCompany),或者传递整个公司实体。传递 ID 本身似乎不起作用,我尝试手动进行。

在控制器中,在您的 createForm() 函数中设置一个选项以获取您的用户 ID:

'userId' => $this->getUser()->getId()

然后,在 ProfileType.php 中的 buildform() 函数中 $builder->add(...) 让用户通过您在控制器中设置的选项,如下所示:

$userId = $options['userId'];