Форма Symfony 2: я хотел бы использовать атрибут имени настраиваемого поля или манипулировать дочерним элементом в форме

1

Я пытаюсь использовать формы Symfony 2, чтобы легко использовать API-интерфейс Doctrine findBy в моих контроллерах.

На самом деле, я хотел бы написать этот код в моем контроллере:

$repository->findBy(
    $request->get('filters'),
    $request->get('orderBy'),
    $request->get('limit'),
    $request->get('offset')
);

Для этого мой URL должен выглядеть так!

  • /сеанс? фильтры [пользователь] = 4
  • /сеанс? фильтры [пользователь] = 4 & фильтры [год] = 2014 & OrderBy = дата и предел = 10

Чтобы предоставить эту функцию моему пользователю, я хотел бы использовать решение, которое я хотел бы использовать в следующих формах:

Решение № 1

$this->createFormBuilder()
        ->add('filters', 'array')
            ->add('user', 'integer')
            ->add('year', 'integer')
        ->add('orderBy')
        ->add('limit')
        ->add('offset')
        ;

Но этого решения или эквивалента не существует. (массив типов не существует)

Решение № 2

$this->createFormBuilder()
        ->add('filters[user]', 'integer')
        ->add('filters[year]', 'integer')
        ->add('orderBy')
        ->add('limit')
        ->add('offset')
        ;

Использование символов ['и'] не допускается и вызывает ошибку.

Другим решением является использование имени пользовательского поля, на самом деле первое решение (без массива с неисключимым типом) создаст этот HTML-код:

<input type="text" id="form_filters" name="form[filters]" required="required" class="form-control">

Это не соответствует требованиям URL. Кто-нибудь знает, как использовать атрибут пользовательского имени? Это также сработало бы, если бы у меня была возможность изменить имя атрибута, чтобы сформировать [фильтры] [что-то] или даже лучшие фильтры [что-то].

Теги:
forms

1 ответ

0

Я не уверен, так как никогда не делал этого, но почему бы вам не попробовать с типом collection?

$this->createFormBuilder()
    ->add('filters', 'collection', array(
        'choices' => array(
            'user',
            'year',
        )
    ))
    [...]

Однако я не уверен, что вы хотите передать параметры через get: если у вас есть форма, и URL-адрес не может быть вызван извне вашего приложения, POST намного лучше

Ещё вопросы

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