Symfonyプロジェクトでは、いくつかのフォームで動作するForm EventSubscriberがあります。FormFieldにFormEvent内のオプションを渡す
すでに入力されている各フィールドを無効にすることを目指しています。私が使用して加入者に
:$childOptions = $child->getConfig()->getOptions();
私が子供のためにすべての解決のオプションを受け取るには、私は、フォームの構築時に渡されたものだけを取得したいです。 (いくつかのFormType(i.o. DocumentType)を作成するので、解決されたすべてのオプションを再投入することはできません。そのいくつかは問題を引き起こします)。
AにformType例:
サブスクライバ:
class ChangesSubscriber implements EventSubscriberInterface { // Disables filled inputs public function postSetData(FormEvent $event) { $form = $event->getForm(); foreach($form->all() as $child) { $childName = $child->getName(); $childType = $child->getConfig()->getType()->getName(); // Here I receive all resolved options // But I only want the options passed above during 'buildForm' ('class','choice_label') : $childOptions = $child->getConfig()->getOptions(); if(!$child->isEmpty()){ $form->add($childName,$childType,array_merge($childOptions,array('disabled'=>true))); } } } }
これは多くのユースケースの一例であり、別の例があり得る: Alsatian\FormBundle ExtensibleSubscriber
- > AJAXが選択肢/団体/文書タイプの選択肢を提出させるための書式作成者。 現時点では、わかりましたが、解決されたオプションをいくつか選択することにしましたが、私はこの解決策に満足していません。
グローバルフォームではなく、フィールド自体にサブスクライバを追加する必要があります。 $ builder-> get( "entity") - > addEventSubscriber($ this-> changesSubscriber) 'を実行します。それに応じて加入者を編集する必要があります。おそらくもうループする必要はありません。 – VaN
サブスクライバが子供の上にいるとき、私は子供を '再作成'できません。そして、オプションを編集して '無効'を追加することはできません。 – Alsatian
サブスクライバの代わりにフォームタイプ拡張を使用することを検討しましたか? – Heah