首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的Extbase属性映射

数组的Extbase属性映射
EN

Stack Overflow用户
提问于 2017-05-02 18:29:17
回答 1查看 4.2K关注 0票数 2

我想使用属性Mapper在流体表单中使用Array对象。如果用户单击"add_product“链接,则产品是动态添加的:

代码语言:javascript
复制
<f:form action="property" name="newOrder" object="{newOrder}">

    <f:for each="{newOrder.orderProduct}" as="orderProduct" iteration="iterator">
        <f:form.hidden property="orderProduct.{iterator.index}.product" value="8" />
        <h3>OrderProduct: {orderProduct.product.title}</h3>
    </f:for>
    <f:form.hidden name="add_product" value="1" />

    <input type="submit" value="submit" />
</f:form>

我在提交后得到的是这个例外。

代码语言:javascript
复制
Uncaught TYPO3 Exception #1297759968: 
Exception while property mapping at property path "orderProduct.0":
Property "product" was not found in target object of type "MyVendor\MyShop\Domain\Model\Product". 

隐藏字段解析为:<input name="tx_myshop_pi1[newOrder][orderProduct][0][product]" value="8" type="hidden"> (静态值8只是为了简化示例)。

我还尝试了使用key="key"代替迭代器,空括号orderProduct[],使用名称而不是属性而没有结果。

这是(简化的)调试输出:

代码语言:javascript
复制
newOrder (MyVendor\MyShop\Domain\Model\ShopOrder)
   => orderProduct (TYPO3\CMS\Extbase\Persistence\ObjectStorage)
      3222112 => MyVendor\MyShop\Domain\Model\OrderProduct
              product => MyVendor\MyShop\Domain\Model\Product
                     uid => 8
                     title => 'Product1'  

这是“示范守则”:

对于Property,我尝试了很多配置,但都没有成功。我认为这是可行的,但却没有:

代码语言:javascript
复制
public function initializePropertyAction()
{
    /** @var \TYPO3\CMS\Extbase\Property\PropertyMappingConfiguration $propertyMappingConfiguration */
    $propertyMappingConfiguration = $this->arguments['newOrder']->getPropertyMappingConfiguration();
    $propertyMappingConfiguration->allowAllProperties();
    $propertyMappingConfiguration->setTypeConverterOption('TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter',
        PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED,
        TRUE);

    $propertyMappingConfiguration->forProperty('orderProduct')->allowAllProperties();
    $propertyMappingConfiguration->forProperty('orderProduct')->setTypeConverterOption(
        'TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter',
        PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED,
        TRUE
    );

    //workaround from https://forge.typo3.org/issues/61628
    for ($i = 0; $i < 99; $i++) {
        $propertyMappingConfiguration->forProperty('orderProduct.' . $i)->allowAllProperties();
        $propertyMappingConfiguration->forProperty('orderProduct.' . $i . '.*')->allowAllProperties();
        $propertyMappingConfiguration->forProperty('orderProduct.' . $i)->setTypeConverterOption(
            'TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter',
            PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED,
            TRUE
        );
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-05-02 18:54:15

我这样解决了它,在我的问题中,有一个动态数量的答案,有两个字段,每个字段:

代码语言:javascript
复制
$propertyMappingConfiguration = $this->arguments->getArgument('question')->getPropertyMappingConfiguration();
$propertyMappingConfiguration->skipProperties('category');
$propertyMappingConfiguration->allowProperties('answers');         
$propertyMappingConfiguration->forProperty('answers.*')->allowProperties('answerField1', 'answerField2');
$propertyMappingConfiguration->allowCreationForSubProperty('answers.*');
$propertyMappingConfiguration->allowModificationForSubProperty('answers.*');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43744835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档