web-dev-qa-db-fra.com

Symfony2 - Utilisation de Form Builder sans aucune entité attachée

J'utilise le générateur de formulaires avec Symfony2, et je le trouve assez agréable. Je me retrouve à vouloir créer une page de recherche avec une série de cases en haut pour filtrer les résultats de recherche. J'ai actuellement trois entités différentes (juges, interprètes, avocats). Je souhaite que les utilisateurs puissent saisir des noms partiels ou complets et le faire rechercher dans toutes les entités. Je peux gérer la partie réelle de la recherche, mais la génération du générateur de formulaires me pose problème.

Ce que j'essaie de faire est de créer un formulaire qui n'est attaché à aucune entité particulière. Tous les tutoriels et la documentation que j'ai lus sur le site Symfony agissent comme s'il devait être attaché à une entité par défaut. Je me demande si je devrais simplement l'attacher à n'importe quelle entité et définir simplement chaque champ de texte sur mapped = false, s'il s'agit d'une instance où je devrais coder en dur le formulaire moi-même, ou s'il existe un moyen de le faire dans le générateur de formulaire .

41
Josh Wa

N'utilisez pas un formType et vous n'avez pas besoin d'attacher une entité pour utiliser le Form Builder. Utilisez simplement un tableau à la place. Vous avez probablement ignoré cette petite section de la documentation 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();
}
79
lifo

Vous pouvez également utiliser la méthode createNamedBuilder pour créer un formulaire

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