Einstellung der Daten, die mit einem Ereignis-listener und die FormEvent::PRE_SET_DATA Veranstaltung in Symfony2

Versuche ich zu ändern, einige Daten in ein Formular basierend auf anderen Daten, die in die form. Von die docs:

Den FormEvents::PRE_SET_DATA-Ereignis wird am Anfang des Formulars::setData () - Methode. Es kann verwendet werden, um:

  • Ändern Sie die Daten, die Sie während der pre-Bevölkerung
  • Ändern eines Formulars abhängig von den vorgegebenen Daten (hinzufügen oder entfernen von Feldern, die dynamisch).

Diese Fett gedruckten Zeile machte mir glauben, es sollte möglich sein, tun Sie etwas wie das folgende in meine buildForm Funktion:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->addEventListener(\Symfony\Component\Form\FormEvents::PRE_SET_DATA,
        function(\Symfony\Component\Form\FormEvent $event) use ($options) {
            if ($options['default_to_nickname']) {
                $securityContext = $this->container->get('security.context');
                $nickname = null;
                if ($securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
                    $user = $securityContext->getToken()->getUser();
                    $nickname = $user->getNickName();
                    if (isset($nickname))
                    {
                        $options['data'] = $nickname;
                        //$event->setData($nickname); //this doesn't work either
                    }
                }
            }
        }
    );
}

Jedoch weder options['data'] = $nickname; noch $event->setData($nickname); Ergebnis in das Formular ausgefüllt mit den korrekten Daten. Ich kann sehen, dass die Daten durch die Lage in der FormEvent Objekt, wenn ich rufe $event->setData($nickname);, aber wenn das Formular neu gezeichnet wird, werden die Daten nicht gesetzt wurde. Bin ich erwarten, dass die falsche Sache? Ich habe mir in sofern etwas anderes sein könnte, ändern Sie es nach dieser, und gibt es nicht. Jede Hilfe wäre sehr willkommen!

InformationsquelleAutor Sammaron | 2014-06-19
Schreibe einen Kommentar