Symfony2: Rechtsform Feld mit einem leeren Wert

habe ich eine form-definition, die verwendet so weit großen Feld Typ entity. Mit der option query_builder ich wählen meine Werte und die werden angezeigt.

Der traurige Teil ist, bin ich verpflichtet eine Anzeige null default-Wert, wie all (es ist ein filter-Formular). Ich weiß nicht, wie die choices Möglichkeit entity weil ich die Datenbank-Werte und eine FormType sollte nicht die Datenbank Abfragen.

Mein Ansatz bisher war die Umsetzung einer benutzerdefinierten Feld-Typ die sich entity und fügt ein null-Eintrag an den Anfang der Liste. Das Feld Typ ist geladen und verwendet, aber leider ist das dummy-Wert wird nicht angezeigt.

Feld definition:

$builder->add('machine', 'first_null_entity', [
    'label' => 'label.machine',
    'class' => Machine::ident(),
    'query_builder' => function (EntityRepository $repo)
    {
        return $repo->createQueryBuilder('m')
            ->where('m.mandator = :mandator')
            ->setParameter('mandator', $this->mandator)
            ->orderBy('m.name', 'ASC');
    }
]);

Form-Typ-definition:

class FirstNullEntityType extends AbstractType
{

    /**
     * @var unknown
     */
    private $doctrine;

    public function __construct(ContainerInterface $container)
    {
        $this->doctrine = $container->get('doctrine');
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setRequired('query_builder');
        $resolver->setRequired('class');
    }

    public function buildView(FormView $view, FormInterface $form, array $options)
    {
        $class = $options['class'];
        $repo = $this->doctrine->getRepository($class);

        $builder = $options['query_builder']($repo);
        $entities = $builder->getQuery()->execute();

        //add dummy entry to start of array
        if($entities) {
            $dummy = new \stdClass();
            $dummy->__toString = function() {
                return '';
            };
            array_unshift($entities, $dummy);
        }

        $options['choices'] = $entities;
    }

    public function getName()
    {
        return 'first_null_entity';
    }

    public function getParent()
    {
        return 'entity';
    }
}
Sie können $Auswahl["] = 'Alle'; im Formular-Typ-definition

InformationsquelleAutor Joshua | 2015-03-13

Schreibe einen Kommentar