2012-05-03 5 views
3

与えられたコレクションに表示されるデータをフィルタリングしたいので、埋め込みコレクションフォームを使用する際に問題があります。すなわちSymfony 2いくつかの基準を使用してコレクションフォームを埋め込む方法

<?php 
Class Parent 
{ 
    ... some attributes ... 

    /** 
    * @ORM\OneToMany(targetEntity="Child", mappedBy="parent", cascade={"all"}) 
    */ 
    private $children; 

    ... some setters & getters ... 

} 

Class Child 
{ 
    private $attribute1; 

    private $attribute2; 

    /** 
    * @ORM\ManyToOne(targetEntity="Parent", inversedBy="children") 
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id") 
    */ 
    private $parent; 

    ... some setters & getters ... 
} 

それから私は使用してフォームを構築:私は$attribute1および/またはChildモデルクラスの$attribute2によってコレクションをフィルタリングしたいとき

class ParentChildType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder 
     ->add('children', 'collection', array(
      'type' => ChildrenType(), 
      'allow_add' => true, 
     )); 
    } 
} 
... 
On controller: 

    $parent = $this->getDoctrine()->getEntityManager()->getRepository('AcmeBundle:Parent')->find($id); 
    $forms = $this->createForm(new ParentChildType(), $parent)->createView(); 

    and then.. 

    return array('forms' => $forms->crateView()); 

私の問題はあります。

このコレクションフォームの条件でフィルタリングする方法はありますか?

+0

通常、$ parentを読み込み、必要な子だけに読み込むときにクエリを使用します。 $ parent- $ repo-> load($ id、$ params);フォームの問題よりもモデルの問題が多い – Cerad

+0

しかし、モデルには問題はありません。問題はコレクション型フォームのように使用したいときです。 – alvaroveliz

答えて

4

は私がからCreateQueryを使用する前に、オブジェクトをフィルタリングし、このフィルタオブジェクトを使用してフォームを作成する必要があることと思われるあなたの問題のように見えるようです。 このように:

$parent = $this->getDoctrine()->getEntityManager()->createQuery(" 
      SELECT p, c 
      FROM AcmeBundle:Parent p 
      JOIN p.children c 
      WHERE c.attribute1 = :attr1 
       AND c.attribute2 = :attr2 
      ") 
      ->setParameter('attr1', <some_value>) 
      ->setParameter('attr2', <some_value>) 
      ->getOneOrNullResult(); 
$forms = $this->createForm(new ParentChildType(), $parent)->createView(); 
.... 
return array('forms' => $form->createView());   
0

私は(私は願って)右方向にあなたを指す:

http://www.craftitonline.com/2011/08/symfony2-ajax-form-republish/

この記事では、フィールドの依存関係を扱います。たとえば、国を選択すると、リストに表示されている国に属する町があります。イッツ

は、それはそれだ

+2

まさに!この例は私の問題を解決するのに役立つかもしれませんが、私はそれを "コレクション"型のフォームで使いたいと思います。 – alvaroveliz

+0

ありがとうございます、その例は非常に便利です – alvaroveliz

+0

私はhttp://aulatic.16mb.com/wordpress/2011/08/symfony2-dynamic-forms-an-event-driven-approach/にアクセスしようとしましたが、 403禁止されたエラー。私は同じ機能を持っているので、実際にこのサンプルを見たいと思っています。 – Floricel

関連する問題