【Symfony2.3】Form関連の仕様変更
symfony2の初めてのLTSのSymfony2.3を使って、Formまわりで前のバージョンと動作が違い感じた3点を書きます。
CallbackValidatorが使えなくなった
CallbackValidatorのnamespaceが変更になりました。
before
1 | Symfony\Component\Form\CallbackValidator |
after
1 | Symfony\Component\Validator\Constraints\CallbackValidator |
namespaceだけではなく、中身も結構変わりましたので、下記FormBuilderの変更と一緒に解説します。
FormBuilderに、addValidatorが削除された
Symfony2.3以前、FormのPost Validatorを追加するのに、下記の書き方でOKですが、
1 2 3 | $builder->addValidator(new CallbackValidator( function(FormInterface $form) { ... })); |
FormBuilderやCallbackValidatorの変更で使えなくなってしまいました。
調べてみると、symfony2.1の更新情報に、下記情報が出てきました。
1 2 3 | The interface FormValidatorInterface was deprecated and will be removed in Symfony 2.3. If you implemented custom validators using this interface, you can substitute them by event listeners listening to the FormEvents::POST_BIND (or any other of the *BIND events). In case you used the CallbackValidator class, you should now pass the callback directly to addEventListener. |
なるほど、symfony2.1でまず非推薦になって、symfony2.3で完全に削除されましたね。
その代わりに、addEventListenerを使うとよさそうです。
1 2 3 4 | $builder->addEventListener(FormEvents::POST_BIND,function($event){ $form = $event->getForm(); ... }); |
Form Theme
Form Themeとは、Formのレイアウトをカスタマイズするものです。
blockのfield_errorsを設定したのに、効いてないことを気付いて、調べたら、form_errorsにリネームされたのようです。
1 | All other field_* blocks and references to them should be renamed to form_*. |
上記、状況が分かるまで、どちらも大変でした。。
Author Profile
スターフィールド編集部
SHARE