【发布时间】: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