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';
}
}
InformationsquelleAutor Joshua | 2015-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein alternativer Ansatz wäre die Verwendung einer
ChoiceList
mit Entscheidungen, die aus der Datenbank generiert und dann in eine benutzerdefinierte Wahl der form geben, dass wird für einenempty_value
.> Wahl-Liste
> Wahl-Liste Service (YAML)
Custom Form Type
Benutzerdefinierte Form-Typ-Service (YAML)
Im Formular
MachineChoiceList
undFirstNullEntityType
als service und übergeben Sie die Liste, um den Typ, nicht ich?Ja, das ist richtig. Ich habe aktualisiert mein Antworten mit dem YAML-Versionen dieser Dienste.
Danke für Eure Hilfe. Ich landete Bau der
ChoiceList
direkt in das Feld Typ wie es scheint, noch flexibler zu mir. Der Schlüssel war die Verlängerung derchoice
Feld, wie Sie vorgeschlagen.Was immer schweben Ihr Boot, Mann. Froh geholfen zu haben ein wenig.
Hinweis: empty_value ersetzt in Symfony v2.6 mit einem Platzhalter, für alle Auswahl-Felder (symfony.com/doc/2.6/reference/forms/types/...)
InformationsquelleAutor qooplmao
Hier ist, was funktioniert in Symfony 3.0.3
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
empty_data => null
funktioniert nicht mit ChoiceTypeInformationsquelleAutor Pavel Petrov
Können Sie Platzhalter von 2,6
query_builder
InformationsquelleAutor nvvetal