Symfony Component Advent Calendar 2022の25日目の記事です。
最初に
SymfonyはPHPのフレームワークのひとつです。しかし、公式サイトの説明文には
Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
(SymfonyはPHPコンポーネントのセットで、Webアプリケーションフレームワークで、哲学、そしてコミュニティです。それらがハーモニーを奏でながら動作しています。)
と書かれている通り、PHPコンポーネントのセットで、たくさんのコンポーネントを提供しており、それらを組み合わせてひとつのフレームワークとして動作しています。Symfonyのコンポーネントは、Symfony上だけで動作するのではなく、他のPHPフレームワークやアプリケーションでも動作している強力なものが揃っています。
今回はそれらの中から、役立ちそうなもの・お薦めしたいものを紹介していきたいと思います。
※記事内ではautoloadのインポートは省略します。
フレームワークの設定をする、"Framework Bundle"
Framework Bundleは、、フレームワークの設定するためのコンポーネントです。
フレームワークの設定をするものであって、フレームワーク自体ではありません。
インストール
composer require symfony/framework-bundle
フレームワーク設定する
Symfonyは、すでにご存知の通りたくさんのコンポーネントから成り立っています。どのようにルーティングしていくか、翻訳をどうするか、セッションはどう管理するかなどをひとつずつ設定していくのは大変です。Framework Bundle
はフレームワークとして動作するために必要な主要な設定を定義するために利用します。
# see https://symfony.com/doc/current/reference/configuration/framework.html
framework:
secret: '%env(APP_SECRET)%'
#csrf_protection: true
http_method_override: false
# Enables session support. Note that the session will ONLY be started if you read or write from it.
# Remove or comment this section to explicitly disable session support.
session:
handler_id: null
cookie_secure: auto
cookie_samesite: lax
storage_factory_id: session.storage.factory.native
#esi: true
#fragments: true
php_errors:
log: true
when@test:
framework:
test: true
session:
storage_factory_id: session.storage.factory.mock_file
変更が必要な場合は、framework.yaml
に設定すれば機能を変更してくれます。
設定できる項目はこちらです。
また、各種コンポーネントインストール時に作成された設定ファイルにもframework:
キーを指定して以降に定義すれば、反映されます。
このFramework Bundle
により、必要な設定が全て反映され、わたしたちの知っているSymfonyとして動作します。
便利なクラスやアトリビュートの提供
Framework Bundle
は設定のほか、フレームワークとして利用する際に便利なクラスやアトリビュートを用意しています。
Controllerで普段使うメソッドを備えた抽象クラスAbstractController
、機能テストを行うときに便利なKernelTestCase
やWebTestCase
、指定のURLにアクセスさせるか決めるサービスを選ぶ#[AsRoutingConditionService]
なんていうアトリビュートも用意しています。
まとめ
今回は、Framework Bundle
を紹介しました。設定とその反映を行うコンポーネントですが、Symfonyにとっては非常に大事なコンポーネントになります。
アドベントカレンダーのまとめ
25日分書き切ることができました。それぞれのコンポーネントは正直基本中の基本な使い方程度の紹介しかできていないです。
詳しくは公式ドキュメントを見ていただきたいのですが、結構かゆいところに手の届くコンポーネントばかりです。
Symfony以外でも動作するものが多いので、ぜひぜひ使ってみていただけたらなと思います。
今回25個のコンポーネントを紹介してきましたが、じつはSymfonyのコンポーネントは全部で207あります。(2022年12月25日現在)
来年もできそうですね。