3

結合された 2 つのエンティティ オブジェクトからフォームを作成することは可能ですか?

私は 2 つのエンティティproperty&propertylanguageを 1 対多の関係で結合しています。(1 つのプロパティで複数の言語を使用できます)

言語にはtitleとの列がありdescriptionます。したがって、1 つのプロパティに英語、フランス語、ドイツ語のタイトルを付けることができます。

そこから形を作ろうとしています。下記参照。

コントローラー: addProperty.php

class AddPropertyController extends Controller
{
    // ....

    public function indexAction(Request $request)
    {
        $property = new  property;
        $language = new  propertyLanguage;
        $property ->addpropertylanguage($language);

        $form = $this->createForm(new propertyType($this->getDoctrine()),$property);

       // ..... 

    }

フォームタイプ:propertType.php

public function buildForm(FormBuilder $builder, array $options)
    {

        $builder
            ->add('title', 'text');
           // other ->add() below.

    }

次のエラーが返されます。

クラス「\defaultBundle\Entity\property」にはプロパティ「title」もメソッド「getTitle()」もメソッド「isTitle()」も存在しません

もちろん、property にはプロパティ Title はありませんが、propertylanguage にはあります。うまくいきません。

お時間ありましたら、よろしくお願いします。

一番、

ピエール。

4

2 に答える 2

1

あなたがしたいことは、PropertyLanguageType クラスと PropertyType を作成することです。

次に、PropertyType に PropertyLanguageType を埋め込みます。

public function buildForm(FormBuilder $builder, array $options)
{

    // $builder->add('propertyLanguage', new PropertyLanguageType());

    // Since we have a 1 to many relation, then a collection is needed
    $builder->add('propertyLanguage', 'collection', array('type' => new PropertyLanguageType()));

PropertyLanguageType は、タイトルを追加する場所です。

マニュアルのフォームセクションにすべて記載されていますが、数回読む必要がある場合があります。

2 番目の方法は、PropertyLanguage エンティティからタイトルを返す getTitle を Property エンティティに追加することです。こうすることで、本来の形が出来上がります。ただし、複数の属性を持つ複数の関連付けを開始すると、少し混乱する可能性があります。各エンティティのタイプを定義するのが最善です。

于 2012-06-08T11:35:05.070 に答える
0

フォームを定義するときに query_builder を使用できます。フォーム クラスは次のようになります。もちろん、それは確かにそうではありませんが、それはあなたに良いスタートを与えるでしょう;)

public function __construct($id)
{
    $this->propertylanguageId = $id;
}   

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('propertylanguage', 'entity', array(
                    'label' => 'Property Language',
                    'class' => 'YourAdressToBundle:Propertylanguage',
                    'query_builder' => function(EntityRepository $er) use ($propertylanguageId) {
                                            return $er->createQueryBuilder('p')
                                            ->join('p.property', 'prop', Expr\Join::WITH, 'prop.id = :propertylanguageId')
                                            ->setParameter('propertylanguageId', $propertylanguageId);
                                       },
                ));
}

それが役立つことを願っています

于 2012-06-08T09:35:40.323 に答える