у меня есть объект SearchFieldType
с ManyToMany
к SearchOperator
:Symonfy типа формы: ограничение сущности выбора поля для соответствующих значений
/**
* @ORM\ManyToMany(targetEntity="SearchOperator", cascade={"persist", "remove"})
* @ORM\JoinTable(
* joinColumns={@ORM\JoinColumn(name="type_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="operator_id", referencedColumnName="id")}
* )
**/
private $operators;
В типе форм, настройка по умолчанию показывает выбери элемент управление с всех существующих операторами для выбора, в то время как я хотел бы показывать только текущие доступные операторы для этого объекта. Вот моя (неудачная) попытка, как я прочитал мне нужно создать слушатель событий (не так ли?) Для того, чтобы получить доступ к ассоциированного объекта:
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$formFactory = $builder->getFormFactory();
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($formFactory)
{
$form = $event->getForm();
$data = $event->getData();
if ($data != null)
{
$form
->add($formFactory->createNamed('name', 'text', array('auto_initialize' => false)))
->add($formFactory->createNamed('operators', 'entity', array('class' => 'AppBundle:SearchOperator',
'multiple' => false,
'expanded' => false,
'choices' => $data->getOperators())))
;
}
});
}
Я получаю эту ошибку:
Automatic initialization is only supported on root forms. You should set the "auto_initialize" option to false on the field "name".
I попытался установить эту опцию в значение false в поле и в самой форме (setDefaultOptions
) без результата.
Моя текущая версия Symfony является 2.7.6
Я не уверен, что понимаю, что вы пытаетесь сделать. Вы хотите показать все доступные операторы для этого объекта. Какая организация? Затем в поле имени появляется ошибка, в которой говорится, что вы должны удалить автоматическую инициализацию. Для отношения «многие-многие» у вас должен быть тип коллекции, а не тип сущности. – anegrea
Мне нужен выпадающий список, показывающий только существующие варианты (операторы) для каждого поля, а не список со всеми существующими операторами (глобально) –
Возможный дубликат [Symfony: невозможно обработать запрос в форме] (http://stackoverflow.com/вопросы/34136594/Symfony-неспособен к ручке-запрос-в-формы) –