得到$这个 - >的getUser()的FormType Symfony4

时间:2019-02-02 07:16:42

标签: symfony4

我有一个名为Profile的实体,与Category有关系。两者都由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本身似乎无效,我尝试手动进行。

1 个答案:

答案 0 :(得分:1)

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

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

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

$userId = $options['userId'];