代码之家  ›  专栏  ›  技术社区  ›  aubin thomas

Symfony:传递给表单的参数保持为默认值

  •  0
  • aubin thomas  · 技术社区  · 1 年前

    有了最新的Symfony,我有一个自定义表格,根据条令要求在实体上填写一个字段。 要构造此请求,它需要一个参数 id 由控制器传递,带有选项“postedBy”

    class StudyDecomposedType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options): void
        {
            $builder
                
                ->add('subjects', EntityType::class,[
                    'class' => Subject::class,
                    'choice_label' => 'identifier',
                    'required' => false,
                    'multiple' => true,
                    'query_builder' => function (EntityRepository $er) use ($options): QueryBuilder {
                        return $er->createQueryBuilder('a')
                            ->leftJoin("a.studies", "s")
                            ->leftJoin(Studyaccess::class, 'sa', 'WITH', 's=sa.study')
                            ->where('(sa.user = :userid AND (sa.r = 1 OR sa.w = 1)) OR (a.owner= :userid)')
                            ->setParameter('userid', $options['postedBy']);
                            
                            
                    },
                    ])
                ;
        }
    
        public function configureOptions(OptionsResolver $resolver): void
        {
            $resolver->setDefaults([
                
                    'postedBy' => 0,
                
    
            ]);
    
            $resolver->setAllowedTypes('postedBy', 'int');
            
        }
    

    在我的控制器中,我制作了这样的表格:

    $form = $this->createForm(StudyDecomposedType::class, 
                       $options= ['postedBy' => $this->getUser()->getId(),] 
            );
    

    但是,无论我在选项中输入什么值,请求中的值都是我默认输入的值(此处为0)。

    有人能帮我吗,我完全迷路了

    参数 userid 应该是通过对 $options 来自crontroller,但该值从未更改。 我验证了控制器中的id,查看了生成的sql和 userid 始终处于其默认值

    1 回复  |  直到 1 年前
        1
  •  0
  •   AymDev    1 年前

    这个 createForm() 方法期望选项作为第三个参数,但您将它们作为第二个参数发送,用于发送数据以填充表单字段。

    通过将null作为第二个参数(这是实际的默认值)来修复订单:

    $form = $this->createForm(StudyDecomposedType::class, null, [
        'postedBy' => $this->getUser()->getId(),
    ]);
    

    如果你使用的是PHP 8+,你可以使用 named arguments :

    $form = $this->createForm(StudyDecomposedType::class, options: [
        'postedBy' => $this->getUser()->getId(),
    ]);