Les données de réglage avec un écouteur d'événement et le FormEvent::PRE_SET_DATA Événement dans Symfony2

Je suis d'essayer de modifier des données dans un formulaire basé sur d'autres données dans le formulaire. De les docs:

La FormEvents::PRE_SET_DATA événement est distribué au début de la Forme::méthode setData (). Il peut être utilisé pour:

  • Modifier les données au cours de la pré-population
  • Modifier un formulaire en fonction de la pré-rempli de données (ajout ou la suppression de champs dynamiquement).

Cette ligne en gras m'a fait croire qu'il devrait être possible de faire quelque chose comme ce qui suit dans mon buildForm fonction:

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
                    }
                }
            }
        }
    );
}

Toutefois, ni options['data'] = $nickname; ni $event->setData($nickname); résultat sous la forme étant remplie avec les données correctes. Je peux voir que les données sont définies dans la FormEvent objet quand je l'appelle $event->setData($nickname);, mais quand la forme est effectivement rendu, les données n'a pas été définie. Suis-je attendre quelque chose de mal? J'ai regardé dans si quelque chose peut être de le modifier après, et il n'y en a pas. Toute aide serait la bienvenue!

InformationsquelleAutor Sammaron | 2014-06-19