Можно ли заполнить настройку типа объекта, как показано ниже, с помощью запроса GET?
В настоящее время тип объекта не будет заполняться, когда строка запроса содержит правильную пару ключей (? Category = 232, строка запроса является результатом отправки форм), поэтому спаривание является правильным), однако, если я настрою тип использовать выбор тип, который он заполняет нормально - я хотел бы сохранить это как тип сущности.
->add('category', 'entity', array(
'required' => false,
'class' => 'AppBundle:FormElementOption',
'choices' => $this->form_repository->getOptionsForSelectEntities($this->directory->getProject()->getId()),
'choices_as_values' => true,
'choice_label'=>'label',
'choice_value'=>'id',
'group_by' => function ($currentObject) {
return $currentObject->getFormElement()->getLabel();
},
))
Представленный элемент формы:
<select id="category" name="category" class="form-control">
<option value=""></option>
<optgroup label="Car Brand">
<option value="221">6 Door</option>
<option value="222">Toyota</option>
<option value="223">Jaguar</option>
<option value="224">Skodai</option>
</optgroup>
<optgroup label="Car Doors Count">
<option value="226">6 Door</option>
<option value="227">Green</option>
</optgroup>
<optgroup label="Car Doors">
<option value="228">1 Door</option>
<option value="229">2 Door</option>
<option value="230">3 Door</option>
<option value="231">4 Door</option>
<option value="232">6 Door</option>
</optgroup>
</select>
Конечно, это возможно, но вам нужна дополнительная конфигурация "снаружи" типа формы. Этот метод идеально подходит для типа формы "фильтр/поиск", но этого следует избегать для создания ресурсов/сущностей.
Всякий раз, когда вы создаете экземпляр FormType, вы указываете ему имя, например "поиск", форма будет искать параметры запроса для параметра с именем "поиск [категория]".
Чтобы использовать "безымянный" тип формы, вы должны использовать в своем контроллере альтернативный синтаксис для создания формы, которая:
$form = $this->get('form.factory')->createNamed(null, new SearchType(), $search);
Первое значение null
означает без имени.
Кроме того, убедитесь, что параметр формы _method
устанавливается для get
, так что данные ищется в строке запроса, а не тело запроса (т.е. _POST
).
FormTypeInterface
. Используйте createNamed, чтобы быть на безопасной стороне. Также убедитесь, чтоhandleRequest($request)
действительно отправляет вашу форму с помощьюisSubmitted
; если нет, проверьте параметр_method
.