【问题标题】:Symfony2: How to create entity form with creation of multiple subentities?Symfony2:如何通过创建多个子实体来创建实体表单?
【发布时间】:2012-05-17 17:10:33
【问题描述】:

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

我正在建立一个非常简单的商店。共有三个实体:ProductsCustomersOrders。最后一个包含三列:customer_idproduct_idquantity。该商店仅包含一个列出所有产品的页面,其中每个产品都有一个选择字段以选择数量,然后是一个用于输入客户数据的表单。

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

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

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

我的想法是这样的:

// 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 实际上对纠正缺失的部分很有帮助。

【问题讨论】:

  • 我认为你让这变得比它应该的更复杂。您需要一个 OrdersFormType,它有一个产品实体集合(用于产品列表)以及一个数量字段。然后,您将 OrdersFormTypes 集合嵌入到您的 CustomerFormType 中。但我认为如果你遵循更传统的命名模式,你会省去一些麻烦。

标签: forms symfony


【解决方案1】:

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

【讨论】:

  • 谢谢。这在很多方面都是一个很好的例子。但是我确实知道如何创建一个动态订单表单,就像这个例子一样。我的问题可能要简单得多:我如何从一开始就列出所有可用的比萨饼,然后只选择我想要的数量?
  • @sprain 你的意思是如何设计用户可以选择数量的购物车?
  • 不像购物车,只是一个非常简单的商店,有数量选择。像这样:sprain.public.s3.amazonaws.com/stuff/simplestore.png我不知道如何定义表单以使其正常工作。
  • @sprain 查看 Form/Types/OrderItem 和 Form/Types/Order。并在 OrderController::editAction 中查看它是如何使用的。否则我需要更多时间来制作一个可行的例子。
  • 感谢您的耐心等待 :) 我确实查看了表格并了解那里发生了什么。如果我继续思考上述问题,我意识到我的主要问题实际上是在产品列表和数量选择之间建立联系,因为它们属于两个不同的实体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多