Подтвердить что ты не робот

Symfony2 - Использование построителя форм без привязки любого объекта

Я использую построитель форм с Symfony2, и считаю это довольно приятным. Я обнаружил, что хочу создать страницу поиска с серией ящиков вверху, чтобы фильтровать результаты поиска. На данный момент у меня есть три разных сущности (судьи, переводчики, адвокаты). Я хотел бы, чтобы пользователи могли вводить частичные или полные имена и искать их для всех объектов. Я могу обрабатывать фактическую часть поиска, но генерация построителя форм - это то, что вызывает у меня проблемы.

То, что я пытаюсь сделать, это создать форму, не привязанную к какой-либо конкретной сущности. Все учебники и документация, которые я читал на сайте Symfony, действуют так, как будто она должна быть привязана к объекту по умолчанию. Я задаюсь вопросом, следует ли мне просто привязать его к любой сущности и просто установить каждое текстовое поле для сопоставления = false, если это экземпляр, где я должен просто жестко закодировать форму самостоятельно или если есть какой-то способ сделать это в построителе форм.

4b9b3361

Ответ 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();