Symfony2.7 тип объекта население из GET

1

Можно ли заполнить настройку типа объекта, как показано ниже, с помощью запроса 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>
Теги:
forms
doctrine2

1 ответ

1

Конечно, это возможно, но вам нужна дополнительная конфигурация "снаружи" типа формы. Этот метод идеально подходит для типа формы "фильтр/поиск", но этого следует избегать для создания ресурсов/сущностей.

Всякий раз, когда вы создаете экземпляр FormType, вы указываете ему имя, например "поиск", форма будет искать параметры запроса для параметра с именем "поиск [категория]".

Чтобы использовать "безымянный" тип формы, вы должны использовать в своем контроллере альтернативный синтаксис для создания формы, которая:

$form = $this->get('form.factory')->createNamed(null, new SearchType(), $search);

Первое значение null означает без имени.

Кроме того, убедитесь, что параметр формы _method устанавливается для get, так что данные ищется в строке запроса, а не тело запроса (т.е. _POST).

  • 0
    Я возвращал значение null из формы :: getName, это то же самое поведение, что и createNamed (null, ..), в результате чего перед элементами в html нет имени? Таким образом, вместо имени формы [категории], выходные данные просто категории
  • 0
    Я думаю, что это, вероятно, должно, но я не буду рекомендовать это, так как это даже не задокументировано в FormTypeInterface . Используйте createNamed, чтобы быть на безопасной стороне. Также убедитесь, что handleRequest($request) действительно отправляет вашу форму с помощью isSubmitted ; если нет, проверьте параметр _method .
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню