0

フォームをレンダリングするときに、コレクション内の最初のアイテムに対してのみ読み取り専用オプションを設定するにはどうすればよいですか?

私の単純なモデル:

class Main
{
    public $others;
}

class Other
{
    public $field1;

    public $field2;
}

私のモデルの単純なフォームタイプ:

class MainType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('others', 'collection', array(
                'type' => new OtherType(),
                'allow_delete' => true,
                'allow_add' => true,
                'by_reference' => false,
            ))
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'App\MyBundle\Entity\Main',
        ));
    }

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

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

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'App\MyBundle\Entity\Other',
        ));
    }

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

そして、単純なアクションメソッド my controller

//...
public function indexAction($id)
{
    $main = new Main();

            $other1 = new Other();
    $other1->field1 = 'a';
    $other1->field2 = 'b';
    $main->others[] = $other;

            $other2 = new Other();
    $other2->field1 = 'c';
    $other2->field1 = 'd';
    $main->others[] = $other;

    $form = $this->createForm(new MainType(), $main);

    //...isValid, persist, flush...
}
//...

フォームを手動でレンダリングするときに条件を作成できますが、フォームコードでそのような制限を入力できるかどうかを知りたいです。

4

1 に答える 1

2

現在、コレクションの行に異なるオプションを設定することはできません。これが価値のある追加になると思われる場合は、課題追跡システムで機能リクエストを作成することをお勧めします。

于 2012-07-31T16:57:03.970 に答える