这是从Symfony中的多个(部分)FormTypes生成表单的正确方法吗?

时间:2015-11-16 18:57:02

标签: forms symfony optimization doctrine entity

我很难在Symfony / Doctrine中找到嵌套的formtypes。我希望能够使用以下组件生成表单作为示例,其中用户可以在对 Category 对象进行任何潜在更新的同时创建新的 Product 如有需要,请提供进一步的信息:

  • 产品说明(文字:来自ProductType
  • 类别(下拉列表:从CategoryType生成)
  • 类别存储位置(文字:要添加到类别的更多信息)

ProductType.php 仅包含实体产品的属性的子集。

CategoryType.php 仅包含实体类别的属性的子集。

在控制器中:

public function newProductAction(Request $request)
{
    $product = new Products();
    $form = $this->createForm(new ProductType(), $product);
    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($product);
        $em->persist($category);
        $em->flush();
        return $this->redirectToRoute('saved_updated');
    }
}

在ProductType中:

这里为伪代码道歉 - 这里我最困惑的两件事是:

  • 是否应该引用 Category 对象或CategoryType
  • ->add('category_location',new CategoryType(), $category) ......或者其他需要做的事情......

    class ProductType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {    
        $builder->add('productname')
                ->add('category','entity,'array(
                      'class=>'AppBundle:Category',
                      'choice_label'=>'category_name',
                      'query_builder'=>function(EntityRepository $er) {
                       return $er->createQueryBuilder('c')
                                 ->orderBy('c.category_name','ASC');
                      }))
                 ->add('category_location',new CategoryType(), $category)
                 ->getForm();
        }
    
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class'=>'\AppBundle\Entity\Products'
            ));
        }
    
        public function getName()
        {
            return 'product';
        }
    }
    

在CategoryType中:

我在这里尝试创建的表单不需要它,但是如果CategoryType是以另一种形式直接调用的呢?

    class CategoryType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {    
        $builder->add('category_name')
                ->add('category_location')
                ->getForm();
        }

        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class'=>'\AppBundle\Entity\Categorys'
            ));
        }

        public function getName()
        {
            return 'category';
        }
    }

0 个答案:

没有答案