symfonyでフォームオブジェクトを作成しました。これは、apiリクエストを処理するためのものです。これらのオブジェクトが作成されると、以下のように、私は、フォームによって消費されることを意味していますデータへのAPIデータを変換し、外部サービスに渡す追加フィールドが追加されたSymfony 2.7のformTypeオブジェクトがあれば、選択肢の文字列にはどのようにアクセスできますか?
$myForm = new MyFormType($foo, $bar);
$form = $this->createForm($myForm, $entity, array('method' => 'POST', 'csrf_protection' => false));
:介してコントローラに作成され
//I pass this in, so that, our api users don't have to pass in
//{uglyAPIVariable45: 721}, but rather {pretty_variable: "go left"}
$goodData = $this->convertOldData($form->getBuilderDataCopy(), $oldData);
このサービスが行うことの1つは、フォームにselectタグのような選択肢がある場合は、apiに渡された文字列をselectタグの値に変換しようとします。このように、選択フィールドに値0、4、5、10に関連付けられた "北"、 "西"、 "南"、 "東"というオプションがある場合、ユーザーは "East"を渡すことができ、 10.ユーザーは、これらのランダムな値のいずれかを渡す必要はなく、文字列を渡すことができます。そして、彼らが "Foo"を通過した場合、エラーを返すと同時に、良い選択肢が何通り通過できるかの説明が返されます。
私の問題は、生産上、私はこれらの価値を知ることができないということです。開発では
、私は、私が使用して私のオプションを得ることができることを見出した
foreach($formBuilderDataCopy as $formElement){
$options = $formElement->getAttributes()['data_collector/passed_options']['choices'];
}
しかし、我々は生産に移動したときに、このコードが壊れました。メソッドgetAttributesが突然nullを返しました。確かに、それは始まりにちょっとしたジャッキーみたいなので、私はこれらの選択肢を得るためのより有効なアプローチを見つけ出したいと思っていました。 al。
残念ながら、ソースコードを見て、get_class_methodsや友人でそれを調べても、この問題は解決されませんでした。私が選択肢を取得したとしても、私が得ることができるのは値ですが、選択ボックスの文字列オプションは得られません。
私のシンフォニーフォームからこのような情報を取得する適切な方法は何ですか?サイドノートとして
、私も試してみました:
$form->get('elementName')->getConfig()->getOption('choices');
をしかし、それはまた、1つだけの数字ではなく、それらの数値を置き換える文字列にIDのリストを返します。例えば
{3: 0, 5: 1, 10: 2, 11: 3...}