带有嵌套对象的

时间:2017-07-17 07:53:14

标签: forms typo3 extbase

我正在使用Typo3 7.6并且我有三个对象:

class Order extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity{
    /**
     * email
     * @var \string
     */
    protected $email;

    /**
     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Ophi\OphiOrder\Domain\Model\OrderItem>
     */
    protected $orderItems = NULL;    
}


class OrderItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity{

    /**
     * @var \Ophi\OphiOrder\Domain\Model\Item
     */
    protected $$item;

    /**
     * @var \Ophi\OphiOrder\Domain\Model\Order
     */
    protected $theorder;

    /**
     * @var \integer
     */
    protected $amount;

}

class Item extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity{

    /**
     * title
     *
     * @var \string
     */
    protected $title;

}

Order包含多个orderItems,其中包含一个金额,OrderItem包含title等属性。我现在要做的是创建一个正确处理这个嵌套对象的订单。

现在我的控制器有一个formAction和一个createAction。我将所有可能的项目{item}分配给我的formAction,我的表单如下所示:

<f:form action="create" object="{order}" objectName="order" id="orderform" enctype="multipart/form-data">
    <f:form.textfield required="1" property="email" type="text" name="email" />
    <f:for each="{items}" as="item">
        <f:form.textfield property="orderItems.{item.uid}.amount" type="number" name="orderItems[{item}][amount]" value=""/>
    </f:for>
</f:form>

当我在createAction中调试$ order时,orderItems在那里并且设置了amount,但是对于每个orderItem,item属性为空。我错过了什么,我在哪里做错了?有任何想法吗?

2 个答案:

答案 0 :(得分:0)

这是可以预料到的,因为没有什么可以将反向引用从OrderItem神奇地设置为Order。但你实际上并不需要这个。下次加载持久性Order对象时,其所有项目也将加载该反向引用。如果您在create操作中不需要此操作,请不要担心这一点。

答案 1 :(得分:0)

您的OrderItem类中的item属性似乎有拼写错误。请尝试删除$

中删除多余的protected $$item;