Виджет формы не связан с ассоциацией Doctrine2? - PullRequest
0 голосов
/ 19 марта 2012

У меня есть форма для создания новой 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 голосов
/ 20 марта 2012

Я думаю, что ваша проблема может быть решена с помощью События формы . Создайте сервис для класса EventSubscriber, введите EntityManager, а затем подпишитесь на событие FormEvents::SET_DATA.

0 голосов
/ 20 марта 2012

На самом деле, я думаю, вам нужна опция 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'
));

Это просто грубый пример, но вы можете найти больше о типе формы сущности здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...