Symfony2 - Использование построителя форм без привязки любого объекта
Я использую построитель форм с Symfony2, и считаю это довольно приятным. Я обнаружил, что хочу создать страницу поиска с серией ящиков вверху, чтобы фильтровать результаты поиска. На данный момент у меня есть три разных сущности (судьи, переводчики, адвокаты). Я хотел бы, чтобы пользователи могли вводить частичные или полные имена и искать их для всех объектов. Я могу обрабатывать фактическую часть поиска, но генерация построителя форм - это то, что вызывает у меня проблемы.
То, что я пытаюсь сделать, это создать форму, не привязанную к какой-либо конкретной сущности. Все учебники и документация, которые я читал на сайте Symfony, действуют так, как будто она должна быть привязана к объекту по умолчанию. Я задаюсь вопросом, следует ли мне просто привязать его к любой сущности и просто установить каждое текстовое поле для сопоставления = false, если это экземпляр, где я должен просто жестко закодировать форму самостоятельно или если есть какой-то способ сделать это в построителе форм.
Ответы
Ответ 1
Не используйте formType, и вам не нужно прикреплять объект для использования Form Builder. Просто используйте массив. Вероятно, вы проигнорировали этот небольшой раздел документации Symfony: http://symfony.com/doc/current/form/without_class.html
<?php
// inside your controller ...
$data = array();
$form = $this->createFormBuilder($data)
->add('query', 'text')
->add('category', 'choice',
array('choices' => array(
'judges' => 'Judges',
'interpreters' => 'Interpreters',
'attorneys' => 'Attorneys',
)))
->getForm();
if ($request->isMethod('POST')) {
$form->handleRequest($request);
// $data is a simply array with your form fields
// like "query" and "category" as defined above.
$data = $form->getData();
}
Ответ 2
Вы также можете использовать метод createNamedBuilder
для создания формы
$form = $this->get('form.factory')->createNamedBuilder('form', 'form')
->setMethod('POST')
->setAction($this->generateUrl('upload'))
->add('attachment', 'file')
->add('save', 'submit', ['label' => 'Upload'])
->getForm();