Symfony2:如何创建具有多个子实体的实体表单?

spr*_*ain 9 forms symfony

这可能是Symfony2中要解决的一个简单任务,但我真的被困在这里:

我正在建一个非常简单的商店.有三个实体:Products,Customers,和Orders.最后一个包含三列:customer_id,product_id,和quantity.该商店只包含一个列出所有产品的页面,每个产品都有一个选择字段,每个产品都可以选择数量,然后是一个表单来输入您的客户数据.

我没有问题为客户数据创建表单,也没有列出产品本身(没有选择字段).

但是,如何创建包含产品选择字段的表单,然后该字段应成为订单实体?

我玩了表单集合,我确实理解了向实体添加标签等所有给定的例子.但我不知道如何根据我的情况调整它.

我的想法是这样的:

// Create new customer
$customer = new Customer();

// At this point, create form and validate it.
// Having trouble here, need a hint to get it right.
...

// If form is ok, loop thru all the products.
// Since I do not know yet how to define the form,
// I don't know yet what to loop over, too.
foreach( ..... ){
    if($quantity > 0){
        $order = new Order();
        $order->setQuantity($quantity);
        $order->setProduct($product);
        $customer->addOrder($order);
    }
}

// then persist $customer, cascading its orders.
...
Run Code Online (Sandbox Code Playgroud)

我一直在花这些时间.任何帮助是极大的赞赏.谢谢!

更新: 最终我得到了它的工作.我创建了一个OrderFactory和一个OrderFormType并且不得不改变整个设置.下面的回复中提到的AcmePizzaBundle实际上是一个很好的帮助,以确保缺少部分.

mez*_*eze 9

看一个例子:AcmePizzaBundle.它有4个您需要的实体:Pizza,Order,OrderItem,Customer.

  • @sprain查看Form/Types/OrderItem和Form/Types/Order.并在OrderController :: editAction中查看它是如何使用的.否则我需要更多时间来做一个有效的例子. (2认同)