Symfony2 - Использование Конструктора Форм Без Привязки Какой-Либо Сущности


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

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

Author: MARTIN Damien, 2013-06-02

2 answers

Не используйте тип формы, и вам не нужно прикреплять объект, чтобы использовать конструктор форм. Вместо этого просто используйте массив. Вы, вероятно, пропустили этот небольшой раздел в документации 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();
}
 78
Author: lifo, 2017-09-26 14:14:40

Вы также можете использовать метод createNamedBuilder для создания формы

$form = $this->get('form.factory')->createNamedBuilder('form', 'form')
            ->setMethod('POST')
            ->setAction($this->generateUrl('upload'))
            ->add('attachment', 'file')
            ->add('save', 'submit', ['label' => 'Upload'])
            ->getForm();
 7
Author: Farid Movsumov, 2015-08-28 12:23:56