【问题标题】:What is the background of allowAllProperties, why is it necessary here?allowAllProperties 的背景是什么,为什么这里需要呢?
【发布时间】:2017-11-12 12:48:46
【问题描述】:

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

控制器

/**
 * 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 允许属性映射,然后将原始 uid 解析为 extbase 对象,就像这样

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


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

【问题讨论】:

    标签: typo3 extbase typo3-7.6.x


    【解决方案1】:

    这确实是设计使然。如果您使用&lt;f:form.textfield.....,则不需要像您一样将其设置为显式。

    这是为了防止不需要的项目因为有人手动更改表单而被过去/保留。 所以这是一个安全问题

    【讨论】:

    • 我不明白这与设置映射单个对象的参数有何不同?我可以轻松地将@param \Redacted\Productfinder\Domain\Model\Category $category 设置为链接中的参数,为什么不通过 ObjectStorage 获取多个值呢?在这两种情况下,PropertyMapper 都将值映射到对象,对吗?这如何提高安全性?
    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 2021-08-27
    • 2010-12-15
    • 2019-01-16
    • 2021-10-22
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多