代码之家  ›  专栏  ›  技术社区  ›  Michael Millar

从实体存储库的下拉列表中获取所选选项的字符串

  •  0
  • Michael Millar  · 技术社区  · 6 年前

    我尝试将存储库拉入symfony 3.4中的表单,然后在提交表单时使用所选选项。

    这是表单代码:

    public function buildForm(FormBuilderInterface $builder, array $options) {
            $builder
                ->add('text', TextareaType::class, [
                    'label' => 'Text'
                ])
                ->add('category', EntityType::class, [
                    'class' => Category::class,
                    'choice_label' => 'name',
                    'query_builder' => function(CategoryRepository $repo) {
                        return $repo->createQueryBuilder('c')
                                    ->groupBy('c.name');
                    }
                ])
                ->add('subcategory', EntityType::class, [
                    'class' => Category::class,
                    'choice_label' => 'subcategory',
                    'query_builder' => function(CategoryRepository $repo) {
                        return $repo->createQueryBuilder('c')
                            ->groupBy('c.subcategory');
                    }
                ]);
        }
    

    有了这个,我可以呈现出这个形状,它看起来很好。我可以在CategoryReportory中选择各种选项。

    {% block body %}
        {{ form_start(form) }}
    
            {{ form_label(form.name) }}
            {{ form_errors(form.name) }}
            {{ form_widget(form.name) }}
    
            {{ form_label(form.subcategory) }}
            {{ form_errors(form.subcategory) }}
            {{ form_widget(form.subcategory) }}
    
     {{ form_end(form) }}
    

    在提交时,使用xdebug检查时,类别是对象类别。我可以看到正确的值(在表单下拉列表中选择的值),但我只需要字符串,例如category.name。我该怎么做?

    另外,它可能需要一个不同的问题,但是当我选择其中一个类别时,我希望更新子类别以排除那些不属于所选类别的子类别。我知道这可能需要jquery。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Michael Millar    6 年前

            $category = $data->getCategory();
            $data->setCategory($category->getName());
            $data->setSubcategory($category->getSubcategory());