Symfony 3 形式多对多
Symfony 3 form many-to-many
我正在尝试创建一个可以下订单的表格。我的数据库架构如下所示:
我想要这样的表格:
这是我目前拥有的:
$order = new Order();
$form = $this->createFormBuilder($order)
->add('naam', TextType::class)
->add('email', EmailType::class)
->add('phoneNumber', TextType::class)
->add('dateTakeout', DateType::class)
->add('hourTakeout', DateType::class)
->add('save', SubmitType::class, array('label' => 'Verzenden'))
->getForm();
但我无法将产品添加到我的表单中。我该怎么做?
更新:
我的产品和分类的关系是这样的:
我有一个带有 ID、名称、已启用和 parentCategoryId 的类别实体。
在我的产品实体中,我有一个类别 属性。
我想展示这样的类别和产品:
将此添加到您的表单中:
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
...
->add('product_A', IntegerType::class)
->add('product_B', IntegerType::class)
->add('product_C', IntegerType::class)
->add('product_D', IntegerType::class)
这是一个整数,所以你可以简单地调用:
$prodA_amount = $form->get('product_A')->getData();
获取值...
我认为这是为实体 OrderHasProducts
、
嵌入多种形式
当初始化你的表单对象时,你需要遍历所有的产品(或者根据你的要求选择其中的一些)并将它们添加到 Order
新的实例中,然后让 symfony 发挥它的魔力来创建表格。
创建嵌入表单:
$builder->add('order_has_products', CollectionType::class, array(
'entry_type' => OrderHasProduct::class
));
并为 OrderHasProduct 实体创建表单
(查看文档 How to Embed a Collection of Forms)
并且在您的控制器中,如下所示:
$order = new Order();
foreach($products as $product) :
// you may wanna create your custom method here
$order->addOrderProduct((new OrderHasProduct())
->setOrder($order)
->setProduct($product));
endforeach;
我正在尝试创建一个可以下订单的表格。我的数据库架构如下所示:
我想要这样的表格:
这是我目前拥有的:
$order = new Order();
$form = $this->createFormBuilder($order)
->add('naam', TextType::class)
->add('email', EmailType::class)
->add('phoneNumber', TextType::class)
->add('dateTakeout', DateType::class)
->add('hourTakeout', DateType::class)
->add('save', SubmitType::class, array('label' => 'Verzenden'))
->getForm();
但我无法将产品添加到我的表单中。我该怎么做?
更新:
我的产品和分类的关系是这样的:
我有一个带有 ID、名称、已启用和 parentCategoryId 的类别实体。
在我的产品实体中,我有一个类别 属性。
我想展示这样的类别和产品:
将此添加到您的表单中:
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
...
->add('product_A', IntegerType::class)
->add('product_B', IntegerType::class)
->add('product_C', IntegerType::class)
->add('product_D', IntegerType::class)
这是一个整数,所以你可以简单地调用:
$prodA_amount = $form->get('product_A')->getData();
获取值...
我认为这是为实体 OrderHasProducts
、
当初始化你的表单对象时,你需要遍历所有的产品(或者根据你的要求选择其中的一些)并将它们添加到 Order
新的实例中,然后让 symfony 发挥它的魔力来创建表格。
创建嵌入表单:
$builder->add('order_has_products', CollectionType::class, array(
'entry_type' => OrderHasProduct::class
));
并为 OrderHasProduct 实体创建表单
(查看文档 How to Embed a Collection of Forms)
并且在您的控制器中,如下所示:
$order = new Order();
foreach($products as $product) :
// you may wanna create your custom method here
$order->addOrderProduct((new OrderHasProduct())
->setOrder($order)
->setProduct($product));
endforeach;