0

別のエンティティへのOneToOneアソシエーションを持つエンティティがあります。これらの目的のために、最初のエンティティを「親」と呼び、関連するエンティティを「子」と呼びます。

子フォームを埋め込んだ親フォームが正常に機能していて、両方のエンティティのすべてのフォーム要素が表示され、データをコントローラーに正常に保存できます。

ここで、埋め込まれたドクトリンエンティティのいくつかの属性にデフォルトを設定したいと思います。コントローラで新しいエンティティの値を設定できますが、子エンティティは埋め込みフォームクラスで作成されます。

// Parent form
class Parent extends AbstractType
{

    public function buildForm(FormBuilder $builder, array $options)
    {
         //parent->add(...) 
         $builder->add('child', new Child(), array());
    }

// In Child Form
class Child extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {

        $builder->add('visibilitycode', 'entity', array('label' => 'Visibility', 'class'=>'Acme\MyBundle\Entity\Visibility', 'property'=>'name'));
        public function getDefaultOptions(array $options)
        {
            return array(
                'data_class' => 'Acme\MyBundle\Entity\Child',
            );
        }

これらのデフォルトの多くは関連する外部キー用であるため、コントローラーでそれらを設定する場合は、次のようなものを使用する可能性があります。

$child->setVisibilityCode($em->getReference('AcmeMybundle:Visibility', 'P'));
4

1 に答える 1

1

2つのソリューションが提供されます(またはそれ以上:-)):

  • エンティティ自体のデフォルト値を初期化しますChild(たとえば、コンストラクターで)
  • empty_dataフォームコンポーネントのオプションを使用します。

    class Child extends AbstractType {
    public function buildForm(FormBuilder $builder, array $options)
    {
    
        $builder->add('visibilitycode', 'entity', array(
            'label' => 'Visibility', 
            'class'=>'Acme\MyBundle\Entity\Visibility',
            'property'=>'name'
        ));
        public function getDefaultOptions(array $options)
        {
            return array(
                'data_class' => 'Acme\MyBundle\Entity\Child',
                'empty_data' => function() use($visibility) {
                    $child = new Child();
                    $child->setVisibility($visibility);
                    return $child;
                }
            );
         }
    }
    
于 2012-05-03T14:18:35.463 に答える