Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 这是从Symfony中的多个(部分)表单类型生成表单的正确方法吗?_Forms_Symfony_Optimization_Doctrine_Entity - Fatal编程技术网

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

Forms 这是从Symfony中的多个(部分)表单类型生成表单的正确方法吗?,forms,symfony,optimization,doctrine,entity,Forms,Symfony,Optimization,Doctrine,Entity,我正努力想弄清楚Symfony/doctor中嵌套的表单类型。我希望能够以使用以下组件生成表单为例,用户可以在创建新产品的同时,根据需要使用更多信息对类别对象进行任何潜在更新: 产品说明(文本:来自ProductType) 类别(下拉列表:从CategoryType生成) 类别存储位置(文本:要添加到类别的更多信息) ProductType.php只包含实体产品属性的子集 CategoryType.php只包含实体类别属性的子集 在控制器中: 在ProductType中: 我为这里的伪代码道

我正努力想弄清楚Symfony/doctor中嵌套的表单类型。我希望能够以使用以下组件生成表单为例,用户可以在创建新产品的同时,根据需要使用更多信息对类别对象进行任何潜在更新:

  • 产品说明(文本:来自
    ProductType
  • 类别(下拉列表:从
    CategoryType
    生成)
  • 类别存储位置(文本:要添加到类别的更多信息)
ProductType.php
只包含实体产品属性的子集

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

在控制器中: 在ProductType中: 我为这里的伪代码道歉——这里我最困惑的两件事是:

  • 它应该引用类别对象还是类别类型
  • ->添加('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
,又如何呢

    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';
        }
    }
经过一些修改后,这个解决方案适合我。
    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';
        }
    }