Задать вопрос
@e-hot

Как реализовать передачу объектов сущности в форму со множественным выбором?

Приветствую всех. Нужна помощь в следующей ситуации:
0. Задача: редактирование списка городов, закрепленных за конкретным пользователем. ( Пользователя не редактируем. )
1. Есть таблица БД Usercity на два поля user_id и city_id - за юзером может закрепляться n-нное кол-во городов ( 1:N ). Есть соответствующая Entity.
2. Есть таблица БД Cities - это справочник со всем исходным перечнем городов в системе. Есть соответствующая Entity.
3. Пишется форма через класс формы для вывода списка всего перечня городов со множественным выбором ( здесь не важно: select это будет или checkbox-ы ), в котором ( в списке ) в соответствии с city_id-ами, выбранными из Usercity для указанного user_id отмечены как selected.

Вопрос: не могу понять, как передать в класс формы данные из Usercity в формате объектов, т.к. Symfony орет - требует данные как объекты, а не строковые данные. Для иллюстрации наработки ниже:

Класс формы:
public function buildForm(FormBuilderInterface $builder, array $options)
{
        $builder->add( 'user_id' , 'hidden' )
                ->add('city_id', 'entity', array( 
                                                'class' => 'Acme\AppBundle\Entity\User\Cities',
                                                'query_builder' => function ( EntityRepository $er ) {
                                                                                return $er->createQueryBuilder( 'u' )
                                                                                          ->groupBy( 'u.city_name' )
                                                                                          ->orderBy( 'u.city_name', 'ASC' );
                                                                    },
                                                'property' => 'city_name',
                                                'preferred_choices' => $this->getCities(),
                                                'multiple' => true,
                                                'label' => false,
                                                'required'  => true,
                                            ) 
                     )
                ->add( 'save', 'submit', array( 'label' => 'Сохранить' ) );
}


Контроллер:
public function editCitiesAction( $user_id, Request $request )
{
        $em = $this->getDoctrine()->getManager();
        $cities = $em->getRepository('Acme\AppBundle\Entity\User\Usercity')->findBy( array( 'user_id' => $user_id ) );
        
        $form = $this->createForm( new editCitiesType( ) ); 

        ...

        return $this->render('AcmeAppBundle:Forms:editCities.html.twig', array( 'form' => $form->createView() ) );
}


Уточнение вопроса: как передать в класс формы $cities?

Заранее благодарен за помощь.
Спасибо.
  • Вопрос задан
  • 203 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@e-hot Автор вопроса
Спасибо за ответ. Стандартное решение в моем случае почему-то не получилось ( еще поэкспериментировал и с collection ), поэтому пришлось решить задачу другим путем - передачей в класс формы двух массивов: один - полный перечень городов, второй - перечень городов заданного юзера. В классе формы эти два массива указал в настройках поля типа choice, где:
'choices' => array( полный перечень городов ),
'preferred_choices' => array( перечень городов заданного юзера ),
'multiple' => true,


В созданный список со множественным выбором довольно-таки быстро грузится более 3 000 городов.
Все - всем спасибо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы