0

ツリーのメインエンティティ、ユーザー、ワークグループ、およびプロジェクトがあります。それらの間にコラボレーションと呼ばれる中間エンティティがあります。実際、ユーザー情報とワークグループ情報を含むプロジェクトを追加するためのフォームを提供できます。フォーム内の接続ユーザーでワークグループをフィルタリングします。

ワークグループの所有者を知るために、ユーザーとワークグループの間にも関係があります。(ユーザーはワークグループで 1 対多、ワークグループはユーザーで多対 1)

# MyNiceBundle/Form/Type/CollaborationType.php
class CollaborationType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('project', new ProjectType());
        $builder->add('participant', 'entity', array(
            'class' => 'MyNiceBundle:User',
            'property' => 'email',
            'multiple' => false,
            'expanded' => true
        ));
        $builder->add('workgroup', 'entity', array(
            'class' => 'MyNiceBundle:Workgroup',
            'property' => 'name',
            'multiple' => false,
            'expanded' => true
        ));
    }
}

前もって感謝します。

4

2 に答える 2

0

イベントを使用してこれを行うことができます。ここを参照してください: http://symfony.com/doc/master/cookbook/form/dynamic_form_generation.html

おそらく FormEvents::POST_SET_DATA イベントで、次のようなことをするでしょう...

public function postSetData(DataEvent $event)
{
    $collaboration = $event->getData();
    $form = $event->getForm();
    $user = $collaboration->getParticipant();

    $form->add(
        $this->factory->createNamed('workgroup', 'entity', null, array(
                'class'         => 'MyNiceBundle:Workgroup',
                'required'      => false,
                'query_builder' => function(EntityRepository $er) use ($user) {
                    return $er->getWorkgroupsForUser($user);
                }
            )
        )
    );
}
于 2012-06-01T14:54:36.213 に答える
0

この質問は、ここで「コントローラーからタイプ symfony2 にデータを渡す」で回答されました

# MyNiceBundle/Controller/ProjectController.php
// I passed as parameter argument the current logged user to my FormType
$form = $this->createForm(new CollaborationType($this->get('security.context')->getToken()->getUser()), new Collaboration);

# MyNiceBundle/Form/Type/CollaborationType.php
class CollaborationType extends AbstractType
{
    protected $user;

    public function __construct (User $user)
    {
        // Get the logged user
        $this->user = $user;
    }

    public function buildForm(FormBuilder $builder, array $options)
    {
        $user = $this->user;

        $builder->add('project', new ProjectType());
        $builder->add('participant', 'entity', array(
            'class' => 'MyNiceBundle:User',
            'property' => 'email',
            'multiple' => false,
            'expanded' => true
        ));
        // Here I sort workgroup by owner
        $builder->add('workgroup', 'entity', array(
            'class' => 'MyNiceBundle:Workgroup',
            'property' => 'name',
            'multiple' => false,
            'expanded' => true,
            'query_builder' => function(EntityRepository $er) use ($user) {
                return $er->createQueryBuilder('w')
                    ->where("w.owner = :user")
                    ->setParameter('user', $user);
            },
        ));
    }
于 2012-06-02T13:05:55.397 に答える