allowAllProperties的背景是什么,为什么这里有必要?

时间:2017-11-12 12:48:46

标签: typo3 extbase typo3-7.6.x

我有一个带有参数的表单,该表单映射到对象存储。在模板中,我有一个表单,用于设置此参数的复选框列表。下面是控制器和模板中操作的概述。

控制器

/**
 * action list
 * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Redacted\Productfinder\Domain\Model\Category> $categories
 * @return void
 */
public function searchAction($categories=NULL) {
    \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(func_get_args());
    ...
}


模板

<f:for each="{categories}" as="option">
    <li class="category-{option.uid}" data-filter="{option.uid}">
        <label for="checkbox-category-{option.uid}">
            <f:form.checkbox name="categories" multiple="true" id="checkbox-category-{option.uid}" value="{option.uid}" checked="{x:condition.iterator.contains(haystack:'{filter.categories}', needle:'{option}', then:'checked')}" />
            <span class="title">{option.title}
        </label>
    </li>
</f:for>


到目前为止,这就像一个魅力。我现在正尝试使用链接设置$ categories参数,但这不起作用。我有一个带有类别的f:for循环。

如果我将参数设置为单个对象,则忽略它。没有错误消息,Extbase只是忽略该值。

<f:link.action action="list" arguments="{categories:category}">{category.title}</f:link.action>


如果我将参数设置为具有该值的数组,如此

<f:link.action action="list" arguments="{categories:{0:'{category}'}}">{category.title}</f:link.action>


Extbase告诉我,参数无法映射。

#1297759968: Exception while property mapping at property path "": It is not allowed to map property "0"

我已经设法弄清楚,我可以告诉Extbase允许属性mappging,然后将原始uid解析为extbase对象,如此

        $propertyMappingConfiguration = $this->arguments->getArgument($property)->getPropertyMappingConfiguration();
        $propertyMappingConfiguration->allowAllProperties();


我想了解这个的背景,为什么有必要允许这个GET参数,当它只适用于POST?我做错了什么,或者这是设计的?

1 个答案:

答案 0 :(得分:1)

这确实是设计上的。如果你使用<f:form.textfield.....,就不需要像你那样设置它的显性。

这是为了防止不需要的项目过去/持久化,因为有人手动更改了表单。 所以它是一个安全的东西