Я пытаюсь использовать формы Symfony 2, чтобы легко использовать API-интерфейс Doctrine findBy в моих контроллерах.
На самом деле, я хотел бы написать этот код в моем контроллере:
$repository->findBy(
$request->get('filters'),
$request->get('orderBy'),
$request->get('limit'),
$request->get('offset')
);
Для этого мой URL должен выглядеть так!
Чтобы предоставить эту функцию моему пользователю, я хотел бы использовать решение, которое я хотел бы использовать в следующих формах:
Решение № 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. Кто-нибудь знает, как использовать атрибут пользовательского имени? Это также сработало бы, если бы у меня была возможность изменить имя атрибута, чтобы сформировать [фильтры] [что-то] или даже лучшие фильтры [что-то].
Я не уверен, так как никогда не делал этого, но почему бы вам не попробовать с типом collection
?
$this->createFormBuilder()
->add('filters', 'collection', array(
'choices' => array(
'user',
'year',
)
))
[...]
Однако я не уверен, что вы хотите передать параметры через get: если у вас есть форма, и URL-адрес не может быть вызван извне вашего приложения, POST намного лучше