表单小部件未绑定到Doctrine2关联?

时间:2012-03-19 19:24:22

标签: symfony doctrine-orm symfony-forms

我有一个用于创建新BroadcastMessage实体的表单,我需要显示绑定到<select multiple="multiple">属性的excludedUsers类型的小部件,与Doctrine2不直接相关协会

在我的BroadcastMessageType类中(继承自AbstractType):

$builder->add('excludedUsers, 'entity', array(
    'class'    => 'Acme\MyBundle\Enrity\User',
    'property' => 'username',
    'multiple' => true
));

这当然适用于创建新 BroadcastMessage;但在editAction我需要一个复杂的查询来获取被排除的用户。我需要计算在名为broadcast_message_reference的交叉引用表中查找记录的排除用户。

我的问题非常简单:在哪里添加此“复杂查询”以便将excludedUsers属性正确绑定到<select multiple="multiple">窗口小部件?在我的getExludedUsers方法中?如果是,我应该如何访问该查询的实体存储库?

class BroadcastMessage
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    private excludedUsers;

    public function __costrunct()
    {
        $this->excludedUsers = new ArrayCollection();
    }

    public function addExcludedUser(Acme\MyBundle\Enrity\User $user)
    {
        $this->excludedUsers[] = $user;
        return $this;
    }

   public function getExcludedUsers() { return $this->excludedUsers; }
}

2 个答案:

答案 0 :(得分:0)

实际上,我认为,您需要在表单项定义中选择query_builder

$builder->add('excludedUsers', 'entity', array(
    'class'    => 'Acme\MyBundle\Enrity\User',
    'property' => 'username',
    'multiple' => true,
    'query_builder' => function(EntityManager $em){
         // you have an instance of EntityManager so you may build
         // arbitrary QueryBuilder. Just remember to return it
         // for example:

         $qb = $em->createQueryBuilder()
                  ->from('Acme\MyBundle\Enrity\User u')
                  ->where('u.excluded = true');
         return $qb;
    },
    'property' => 'username'
));

这只是一个粗略的示例,但您可以找到有关实体表单类型here的更多信息。

答案 1 :(得分:0)

我认为你的问题可以通过Form events来解决。为EventSubscriber类创建服务,注入EntityManager,然后订阅FormEvents::SET_DATA事件。