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