在单个 Extbase ControllerAction 参数中获取包含 DomainObjects 的数组
Get an array with DomainObjects in a single Extbase ControllerAction argument
我正在创建一个 extbase 扩展来处理非常简单的产品订单。
型号是:
Order --1:n--> OrderItem --1:1--> Product
为了订购一系列产品,客户转到结帐页面并使用基于 Fluid 的订单。所有选定的产品都在流体模板中可用,形式为 {products}
。
OrderController->createAction
通过从给定的产品创建 OrderItems 来处理新订单。
编写我想要的代码如下所示:
class OrderController
{
public function create(Order $order, array $products)
{
foreach ($products as $product) {
$orderItem = new OrderItem()
->setProduct($product)
->setPrice($product->getPrice());
$order->addOrderItem($orderItem);
}
$this->orderRepository->add($order);
}
}
- 如何将产品分配给 Fluid 表单字段,以便将它们作为 ControllerAction 数组参数接收?
- 如何触发 extbase 自动向 ControllerAction 提供产品对象数组?
- 我想知道是否有可能简化如下所示的 Controller createAction 和其他地方的 assemble 对象:
public function create(Order $order) {
$this->orderRepository->add($order);
}
我对流体模板的建议是:
// basic form with the order as main object
<f:form action="create" object="{order}">
// each order item with a product, using index to have no array with an empty index (Extbase does not like that)
<f:for each="{products}" key="index" as="product">
// Here you can set the product
<f:form.hidden prpoerty="orderItems.{index}.product" value="{product} />
</f:for>
</f:form>
这应该足以使用您的单行创建操作。
您可以将字段类型从 select 更改为您想要的任何类型,但是 __identity
必须说明 Extbase 的记录必须 link.
如果要新建orderItems,需要去掉__identity
字段。
我正在创建一个 extbase 扩展来处理非常简单的产品订单。 型号是:
Order --1:n--> OrderItem --1:1--> Product
为了订购一系列产品,客户转到结帐页面并使用基于 Fluid 的订单。所有选定的产品都在流体模板中可用,形式为 {products}
。
OrderController->createAction
通过从给定的产品创建 OrderItems 来处理新订单。
编写我想要的代码如下所示:
class OrderController
{
public function create(Order $order, array $products)
{
foreach ($products as $product) {
$orderItem = new OrderItem()
->setProduct($product)
->setPrice($product->getPrice());
$order->addOrderItem($orderItem);
}
$this->orderRepository->add($order);
}
}
- 如何将产品分配给 Fluid 表单字段,以便将它们作为 ControllerAction 数组参数接收?
- 如何触发 extbase 自动向 ControllerAction 提供产品对象数组?
- 我想知道是否有可能简化如下所示的 Controller createAction 和其他地方的 assemble 对象:
public function create(Order $order) {
$this->orderRepository->add($order);
}
我对流体模板的建议是:
// basic form with the order as main object
<f:form action="create" object="{order}">
// each order item with a product, using index to have no array with an empty index (Extbase does not like that)
<f:for each="{products}" key="index" as="product">
// Here you can set the product
<f:form.hidden prpoerty="orderItems.{index}.product" value="{product} />
</f:for>
</f:form>
这应该足以使用您的单行创建操作。
您可以将字段类型从 select 更改为您想要的任何类型,但是 __identity
必须说明 Extbase 的记录必须 link.
如果要新建orderItems,需要去掉__identity
字段。