Я показываю html-таблицу для отфильтрованной коллекции сущностей, и я хочу отобразить флажок в каждой строке как часть формы, которая добавит выбранные сущности в переменную сеанса.
Я думаю, что каждый флажок должен иметь идентификатор объекта в качестве значения, и я получу массив идентификаторов из данных поля формы (хорошо, поэтому значение должно быть косвенной ссылкой на объект, но ради простота).
Я попытался создать тип формы с одним полем типа объекта, сопоставленным со свойством id объекта и встроенным в другой тип формы, который имеет поле типа коллекции.
class FooEntitySelectByIdentityType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('foo_id', 'entity', array(
'required' => false,
'class' => 'MeMyBundle:FooEntity',
'property' => 'id',
'multiple' => true,
'expanded' => true
));
}
# ...
а также
class FooEntitySelectionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('identity', 'collection', array(
'type' => new FooEntitySelectByIdentityType,
'options' => array(
'required' => false,
'multiple' => true,
'expanded' => true,
'attr' => array('class' => 'foo')
),
));
}
# ...
а в контроллере создается форма с коллекцией сущностей в качестве исходных данных
$form = $this
->createForm(
new \Me\MyBundle\Form\Type\FooEntitySelectionType,
$collection_of_foo
)
->createView()
;
Когда форма отображается, для поля идентификатора отображается одна метка, но нет виджетов.
Возможно ли вообще использовать поля типа сущности и коллекции именно таким образом? Если да, то что я могу делать неправильно?
$form->getData()
возвращает массив, содержащий набор сущностей, а не простые целочисленные идентификаторы, но я полагаю, что преимущество заключается в том, что в сеансе не может быть недопустимых идентификаторов. спасибо @jah! 01.02.2013EntityChoiceList
создаст целочисленные индексы для дочерних элементов, а вызовform_widget
вызовет исключение. :( 17.03.2014