2017-11-12 12 views
0

私は、オブジェクトストレージにマップされたパラメータを持つフォームを持っています。テンプレートでは、このパラメータにチェックボックスのリストを設定するフォームがあります。コントローラとテンプレートのアクションの概要を示します。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パラメータのためにこれを許可する必要があるのはなぜですか?私は何か間違っているのですか、それともこれは設計によるのですか?

答えて

1

実際これは設計によるものです。 <f:form.textfield.....を使用する場合は、あなたのようにExplicietを設定する必要はありません。

これは、誰かが手動でフォームを変更したために不要なアイテムが過去/永続化されないようにするためです。 セキュリティの問題

+0

単一のオブジェクトをマップするパラメータを設定する方法とはどのように違うのですか? @param \ Redacted \ Productfinder \ Domain \ Model \ Category $カテゴリをリンクの引数として簡単に設定することはできますが、ObjectStorageで複数の値を取るのはなぜですか?どちらの場合も、PropertyMapperは値をオブジェクトにマップします。それがどのようにセキュリティを向上させるのでしょうか? – j4k3

関連する問題