我很难在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');
}
}
这里为伪代码道歉 - 这里我最困惑的两件事是:
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
是以另一种形式直接调用的呢?
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';
}
}