selectを使うFormについて

252 views
Skip to first unread message

roronya

unread,
Dec 20, 2014, 8:27:23 AM12/20/14
to symfony-...@googlegroups.com
こんにちは。Symfony2でWebサービスを作っている初心者です。よろしくお願い致します。

質問なのですが、現在サービスに加入する際の登録フォームの実装で困っています。

class ContractRegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options){
        $builder
            ->add('plan');
    }

    public function getName(){
        return 'contract';
    }
}

このようにFormを定義すると下のようなselectタグを用いたFormが生成されます。


しかしながら、下のようにSubscriberRegistrationTypeにContractRegistrationTypeをいれるとselctタグで生成されずtextで入力するようになってしまいます。

class SubscriberRegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options){
        $builder
            ->add('subscriberFname')
            ->add('subscriberLname')
            ->add('subscriberFkana')
            ->add('subscriberLkana')
            ->add('subscriberPswd')
            ->add('contracts', new ContractRegistrationType())
           ;
    }

    public function getName(){
        return 'subscriber';
    }
}


どこか設定を忘れているでしょうか?どのようにすればselectタグで生成されますか?


よろしくお願い致します。




hidenorigoto

unread,
Dec 20, 2014, 9:04:10 PM12/20/14
to symfony-...@googlegroups.com
後藤です。

まず、現在のroronyaさんの書き方は、

 $builder
            ->add('plan');

ですので、フィールドごとにタイプを明示的には指定せず、Symfonyに自動的にタイプを判定させるようになっています。
この場合、フォームにバインドしたエンティティのバリデーション定義などを見て、どのフィールドタイプを使うのかが決まります。

私はこの自動判定を使っていないので、自動判定に「うまく判定してもらう」方法はちょっと分かりません。
(SubscriberRegistrationTypeで使うエンティティクラスの該当フィールドに、何かバリデーションを書けばよいのかもしれません)

私としては、フィールドタイプごとに明示的にタイプを指定する書き方を使います。

 $builder
            ->add('plan', 'choice', ['choices' => [・・・]]);

roronya

unread,
Dec 21, 2014, 1:03:21 AM12/21/14
to symfony-...@googlegroups.com
後藤さん

ありがとうございます。
タイプを明示的に指定しないといけなかったのですね。
choicesにDBからplanを読み込んで渡してやればよいのかなと思いましたが、フォームからDBへはどのように接続すればよいのでしょうか。

hidenorigoto

unread,
Dec 21, 2014, 6:33:08 AM12/21/14
to symfony-...@googlegroups.com
後藤です

エンティティのリストを使うだけであれば、EntityTypeが使えます

roronya

unread,
Dec 21, 2014, 8:37:19 AM12/21/14
to symfony-...@googlegroups.com
後藤さん。

実装できました。ありがとうございました。
Reply all
Reply to author
Forward
0 new messages