我有一个带有参数的表单,该表单映射到对象存储。在模板中,我有一个表单,用于设置此参数的复选框列表。下面是控制器和模板中操作的概述。
控制器的
/**
* 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?我做错了什么,或者这是设计的?
答案 0 :(得分:1)
这确实是设计上的。如果你使用<f:form.textfield.....
,就不需要像你那样设置它的显性。
这是为了防止不需要的项目过去/持久化,因为有人手动更改了表单。 所以它是一个安全的东西