Symfony Advent Calendar 2022 day1の記事です!
20202/11/30(日本時間だと2022/12/02になってから)にSymfony 6.2がリリースされました。 https://symfony.com/blog/symfony-6-2-0-released というわけで、Symfony6.2の新機能のうち注目すべきものをまとめました。

Template, Security, Cache, ParamConverterがSensioFrameworkExtraBundleからSymfonyコアに移動

基本的にuseするnamespaceを変えるだけで使い方は変わりませんが、ParamConverterだけ重要な変更が2点あるので注意です。

  • ParamConverterは MapEntity に名前が変わります。
  • DoctrineのEntityじゃないものをParamConverter的につっこむにはArgumentResolverの方を使うことになりました。
    • いままで自前のParamConverterクラスを書くことでDoctrineのEntity以外のもの(Enumやデータクラスなど)をControllerのアクションに引数として渡すことができていました。今後はCustomのValueResolverを実装してください( Custom ValueResolverのドキュメント

公式記事 https://symfony.com/blog/new-in-symfony-6-2-built-in-cache-security-template-and-doctrine-attributes

Clock Component

新しく Clock コンポーネントが追加されました。 https://github.com/symfony/clock

公式記事 https://symfony.com/blog/new-in-symfony-6-2-clock-component

PSR-4 RouteLoaderによるパフォーマンス向上

config/routes.yamlでControllerのパスだけを指定していましたが、所定のディレクトリ以下にあるファイル全部に定義されたクラスを探しに行くようになっており、キャッシュのない初回アクセス時(またはコマンドによるキャッシュ生成時)にパフォーマンスが低下していました。
今回追加された Psr4DirectoryLoader により、PSR-4を利用してクラスを効率的に探せるようになりました。開発者にとってはnamespaceも指定するだけの変更でパフォーマンス向上が期待できます。

公式記事 https://symfony.com/blog/new-in-symfony-6-2-psr-4-route-loader

FormのcreateView()が不要に

SymfonyFormをTwigに引き渡すとき、 $form そのものでなく $form->createView() を渡す必要がありましたが、 createView() を呼ばずに $form を渡しても良くなりました。Twigでレンダリングする前に内部的に createView() が呼ばれるようになったとのことです。

公式記事 https://symfony.com/blog/new-in-symfony-6-2-dx-improvements#simpler-form-rendering

DependencyInjectionでEnumがもっと使いやすく

Enumをサービスのコンストラクタ引数として注入したいとき、 !php/enum をつけてFQCNからEnumを指定することで注入できるようになりました。(いままでも !php/const をつければ注入できていましたが、enumであることがより明示的になりました)

公式記事 https://symfony.com/blog/new-in-symfony-6-2-improved-enum-support

Fileバリデーションで拡張子ベースのファイルタイプバリデーションができるように

従来はファイルの種類に制約をかけたいとき、mimeTypeをで指定する必要がありました。画像やPDFぐらいなら良いのですが、csvとかエクセルファイルってmimeTypeなんだっけ…と私も毎回ググっていました。
Symfony6.2ではファイルの拡張子ベースで種類を指定できるようになりました。迷わず、ググらずに types: 'xlsx' 等と指定すればOKになりました。

公式記事 https://symfony.com/blog/new-in-symfony-6-2-improved-file-validator

条件付きバリデーション

項目Aがxxxなら項目Bはyyy以内、のような条件付きのバリデーションは、従来Callback制約を使って専用メソッドを実装するか、自前のConstraintとValidatorを作る必要がありました。
Symfony6.2では Symfony\Component\Validator\Constraints\When アトリビュートが追加され、expression で指定した条件によって制約をON/OFFできます。

公式記事 https://symfony.com/blog/new-in-symfony-6-2-conditional-constraints



紹介しきれなかった新機能がまだまだあります。 Symfony公式サイトのブログのliving-on-the-edgeカテゴリ に新機能の情報が集まっていますので、気になる方はそちらもチェックしてみてください。



Symfonyアドベントカレンダー2022、明日もカルテット開発部から @kin29ma_nさん の記事でお届けします!お楽しみに!