Symfonyの設定ファイルでのwhenを使った再利用について
Symfony Advent Calendar 2023 の18日目の記事です!
Symfonyの設定ファイルでは when
キーワードを使って環境ごとの設定を記述できます。
# config/framework.yaml
# see https://symfony.com/doc/current/reference/configuration/framework.html
framework:
secret: '%env(APP_SECRET)%'
#csrf_protection: true
handle_all_throwables: true
# 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
#esi: true
#fragments: true
php_errors:
log: true
when@prod:
framework:
trusted_proxies: '127.0.0.1,REMOTE_ADDR'
when@test:
framework:
test: true
session:
storage_factory_id: session.storage.factory.mock_file
liip_test_fixtures:
cache_db:
sqlite: Liip\TestFixturesBundle\Services\DatabaseBackup\SqliteDatabaseBackup
このような形で when@prod
, when@test
と一つのファイルで環境ごとの設定を変えることができます。
APP_ENVで定義されいる値によって切り替わります。
APP_ENV=prod
だったら、whenがついてない最初に定義されているframework:
から始まる設定部分をベースに when@prod
で定義してある trusted_proxies: '127.0.0.1,REMOTE_ADDR'
の部分が追加されます。
ちなみに昔は以前は config/packages/<environment-name>/*.<extension>
みたいにファイルごと分けて書いていました。
今は when
キーワードを選択するか環境ごとにファイルを分割するかどちらも利用可能です。
設定ファイルの再利用
whenキーワードを使って環境ごとに設定していると、環境A,環境Bだけは共通で環境Cはちょっと変えたいんだよなぁってことが起こります。
たとえば、ステージングと本番環境は同じ設定をしたいよなぁというのとか。
when@prod:
framework:
trusted_proxies: '127.0.0.1,REMOTE_ADDR'
when@stg:
framework:
trusted_proxies: '127.0.0.1,REMOTE_ADDR'
その場合に上記のようにコピペして書いてしまいがちですよね。(僕はコピペしてました...)
でも実はこの設定を再利用することができます。
以下のように書くことで再利用することができます。
when@prod:
framework: &framework_prod
trusted_proxies: '127.0.0.1,REMOTE_ADDR'
when@stg:
framework: *framework_prod
アンカーとエイリアスについて
&framework_prod
の部分、&
から始まる名前をアンカー言います。
そして*framework_prod
の部分、 *
から始まる名前をエイリアスと言います。
つまり、アンカーで定義された設定情報をエイリアスとして利用すると再利用できるということです。
Discussion