Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/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 Symfony2:如何通过创建多个子实体来创建实体表单?_Forms_Symfony - Fatal编程技术网

Forms Symfony2:如何通过创建多个子实体来创建实体表单?

Forms Symfony2:如何通过创建多个子实体来创建实体表单?,forms,symfony,Forms,Symfony,在Symfony2中,这可能是一项简单的任务,但我真的被困在这里: 我正在建一个非常简单的商店。有三个实体:产品,客户,和订单。最后一列包含三列:customer\u id,product\u id,以及quantity。商店只包含一个页面,列出所有产品,每个产品都有一个选择字段来选择数量,然后是一个表单来输入客户数据 我可以为客户数据创建表单,也可以列出产品本身(没有选择字段) 但是如何创建一个包含产品的选择字段的表单,然后这些字段应成为订单实体? 我玩过表单集合,我确实理解所有给实体添加标签

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

我正在建一个非常简单的商店。有三个实体:
产品
客户
,和
订单
。最后一列包含三列:
customer\u id
product\u 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.
...
我花了好几个小时在这上面。非常感谢您的帮助。谢谢

更新:
最终我让它工作了。我创建了一个
OrderFactory
和一个
OrderFormType
,必须对整个设置进行一些更改。下面的回复中提到的AcmePizzaBundle实际上对纠正缺少的部分有很大帮助。

请看一个示例:。
它有4个您需要的实体:比萨饼、订单、订单项、客户。

谢谢。这在许多方面都是一个很好的例子。但是,我知道如何创建一个动态订单,如本例所示。我的问题可能要简单得多:我如何从一开始就列出所有可用的比萨饼,然后只选择我想要的数量?@sprain你的意思是如何设计购物车,让用户可以选择数量?不像购物车,而只是一个有数量选择的非常简单的商店。像这样:我不知道如何定义表单来让它工作。@sprain看看表单/Types/OrderItem和表单/Types/Order。并在OrderController::editAction中查看如何使用它。否则我需要更多的时间来做一个有效的例子。谢谢你的耐心:)我确实看了表格,并且理解了那里发生的事情。如果我继续思考上面提到的问题,我意识到我的主要问题实际上是在产品列表和数量选择之间建立联系,因为它们属于两个不同的实体。我认为你让这变得比它应该的更复杂。您需要一个OrdersFormType,它将有一个产品实体集合(用于产品列表)和一个数量字段。然后将OrdersFormType的集合嵌入到CustomerFormType中。但是我认为如果你遵循一个更传统的命名模式,你会省去一些麻烦。