symfonyでform名を変更

フォームを同一ページに複数配置する場合など、IDが重複してしまう問題が出てしまったので対処法を調べてみた。

フォームタイプクラスを作成

 
/**
  * フォームタイプを定義
  */
class AddressType extends AbstractType
{
        /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('zip_code')
           ->add('address')
        ;
    }
 
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Achme\MasterBundle\Entity\Address'
        ));
    }
 
    /**
     * @return string
     */
    public function getName()
    {
        return 'address';
    }
}
 

コンテナから form.factorycreateNamedBuilder を呼び出して、そこから名前を変更したフォームを作成できる。

 
//Controller内で
 
$type = new AddressType();
$form = $this->createForm($type, $address);
$fb = $this->get("form.factory")->createNamedBuilder("my_address_form_name",  $type);
$fb->setData($address);
$form = $fb->getForm();