инфографика http://dl.dropbox.com/u/22495762/infographic.png
Мне нужна группа флажков со всеми возможными вариантами (предпочтениями) и предпочтительными вариантами. Если есть 3 настройки и 2 выбраны пользователем, должно быть 3 флажка, 2 выбраны.
Если все сделано на простом PHP: дважды запросите базу данных, чтобы получить список всех настроек и пользовательские настройки, отображение флажков в зависимости от значений и добавление некоторых действий для обработки отправки формы.
Но мне не удалось заставить это работать с помощью Symfony и Doctrine. Я мог бы обновить отношения в Doctrine и базе данных, но используя необработанный запрос:
Код: Выделить всё
$data = $request->request->get('some_form');
Я застрял в том, как мне отображать список флажков. Я либо получил список всех параметров (ни один не выбран), либо только параметры пользователя, все отмечены, либо результат левого объединения с флажками для всех параметров.
Я попытался перегрузить шаблон флажка ветки. , но мне не удалось передать переменные в шаблон формы.
Получается группа флажков, не связанных с выбором пользователя:
Код: Выделить всё
->add('prefs', 'entity', array(
'class' => 'Some\TestBundle\Entity\Pref',
'expanded' => 'true',
'multiple' => 'true',
'property' => 'name'
))
Код: Выделить всё
->add('prefs', 'entity', array(
'class' => 'Some\TestBundle\Entity\UserPrefs',
'multiple' => 'false',
'expanded' => 'false',
'property' => 'pref.name',
'query_builder' => function(EntityRepository $er) use ($id) {
return $er->createQueryBuilder('u')
->where("u.user = :id")
->setParameter('id', $id)
;
},
))
Таким образом я проверяю соответствующие флажки:
Отображается группа флажков:
Код: Выделить всё
->add('pref_ids', 'choice', array(
'choices' => array(
'1' => 'pref one',
'2' => 'pref two',
'3' => 'pref three',
),
'expanded' => 'true',
'multiple' => 'true'
))
Затем я установил значения в массиве в соответствии с предпочтениями, выбранными пользователем:
Код: Выделить всё
public function setPrefIds()
{
$prefs = $this->getPrefs();
$this->pref_ids = array();
foreach($prefs as $pref){
array_push($this->pref_ids, $pref->getPref()->getId());
}
return $this;
}
Код: Выделить всё
$data = $request->request->get('edit_form');
var_dump($data['pref_ids']);
Код: Выделить всё
foreach ($userPrefs as $pref){
$em->remove($pref);
}
Код: Выделить всё
$entity->setPrefsById($em, $data['pref_ids']);
Тогда:
Код: Выделить всё
$em->flush();
Подробнее здесь: https://stackoverflow.com/questions/941 ... d-doctrine