10

1) symfony メソッドはありますか?

次のようないくつかの選択フィールドを含む基本的なフォーム(データベースにマップされていない)があります。

    $builder->add('civility', 'choice',  array('choices'=> array('m' => 'M.', 'mme' => 'Mme', 'mlle' => 'Mlle')))

フォームが送信された後、アクションで (または、さらに良い場合はテンプレートで)、フォーム送信された値の代わりにオプションのラベル値を取得するにはどうすればよいですか? (この場合、テンプレートで "m" の代わりに "M." をレンダリングできるようにしたい)

みたいなことを考えていた$form->get("civility")->getChoiceLabel($form->get("civility")->getData())

しかし、ドキュメントにはこのようなものは見つかりませんでした (Symfony1 にはそのようなものがありましたが)。

2) そうでない場合、どのように作るのが一番良いですか?

したがって、フォームで使用されるデータクラスで、..のように、それを行うためのいくつかのメソッドを作成することを考えていました:

private $choices = array("civility" => array('m' => 'M.', 'mme' => 'Mme', 'mlle' => 'Mlle'));
static public function getChoiceLabel($choice_value, $field_name)
{
    return  self::$choices[$field_name][$choice_value];
}

static public function getChoices($field_name)
{
    return self::$choices[$field_name];
}

しかし、問題は、小枝テンプレートで静的メソッドを使用することを想定していないことです (フォーム生成、buildForm メソッドで使用できるようにするために静的にする必要があり、一部のコードを複製しないようにする必要があります)。

4

1 に答える 1

16

次のように、選択したラベルとその値にアクセスできます。

$form->get('civility')->getConfig()->getOption('choices');

続きを読む: Symfony\Component\Form\FormConfigInterface::getOption()

于 2013-07-03T19:20:56.343 に答える