私は、オブジェクトストレージにマップされたパラメータを持つフォームを持っています。テンプレートでは、このパラメータにチェックボックスのリストを設定するフォームがあります。コントローラとテンプレートのアクションの概要を示します。allowAllPropertiesの背景は何ですか、なぜここに必要ですか?
コントローラ
/**
* 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は、パラメータをマップすることができないことを、私に語りました。私はそう
$propertyMappingConfiguration = $this->arguments->getArgument($property)->getPropertyMappingConfiguration();
$propertyMappingConfiguration->allowAllProperties();
私がしたいように、私は、プロパティmappgingを許可するようにExtbaseを伝えることができることを、把握した後、extbaseオブジェクトに生のUIDを解決するために管理してきました
#1297759968: Exception while property mapping at property path "": It is not allowed to map property "0"
これのバックグラウンドを理解したいのですが、GETパラメータのためにこれを許可する必要があるのはなぜですか?私は何か間違っているのですか、それともこれは設計によるのですか?
単一のオブジェクトをマップするパラメータを設定する方法とはどのように違うのですか? @param \ Redacted \ Productfinder \ Domain \ Model \ Category $カテゴリをリンクの引数として簡単に設定することはできますが、ObjectStorageで複数の値を取るのはなぜですか?どちらの場合も、PropertyMapperは値をオブジェクトにマップします。それがどのようにセキュリティを向上させるのでしょうか? – j4k3