【Symfony】Formでsubmitされたあとの値を拾って書き換える

symfony.com

Formイベントをハンドリングして値を書き換えることができる。

イベントは何種類かあるのだけど、FormEvents::PRE_SUBMITFormEvents::SUBMIT かで値を書き換えようとして、FormEvents::SUBMIT は値書き換えできないんだった、的なことに気づくことがあるので、ついでに書いておく。

<?php
// ...
class MyType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, [
                'label' => '名前'
            ])
            ->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit'])
            ->addEventListener(FormEvents::SUBMIT, [$this, 'onSubmit'])
        ;
    }

    // ...

    public function onPreSubmit(FormEvent $event)
    {
        // OK: ここではPOST値を変えることができる
        $data = $event->getData();
        $data['name'] = '田中太郎';
        $event->setData($data);
    }

    public function onSubmit(FormEvent $event)
    {
        // NG: ここではPOST値を変えることができない
        $data = $event->getData();
        $data['name'] = '田中太郎';
        $event->setData($data);
    }
}