EC-CUBE4 の Docker環境で環境変数を設定する際に、思わぬ壁にぶち当たりました。
services.yaml に記述されている設定内容を、環境ごとに分けるため、環境変数から取得するようにしたかったのです。
クレジット決済の3Dセキュアに関する設定なので、3D_SECURE_SETTING といった感じの名前で環境変数を登録し、設定として取得するようにしました。
docker-compose を使用する環境で環境変数を登録するには、docker-compose.dev.yml の environment に記述します。
services:
ec-cube:
environment:
3D_SECURE_SETTING: "my_value"
環境変数を設定ファイル services.yaml で取得するには、’%env(環境変数名)%’ とします。
parameters:
my_setting: '%env(3D_SECURE_SETTING)%'
以上で、コントローラー等で
$this->eccubeConfig['my_setting']
とすれば、”my_value”が読み取れるはず、が、以下のエラーが発生しました。
Environment variable not found: “3D_SECURE_SETTING”
何度も設定方法を確認し、コンテナの再起動とキャッシュクリアを繰り返すも虚しく時間がすぎるだけでしたが、ふと、「この変数名…?」と気づきました。
数字で始まる変数名は、多くのプログラミング言語で許可されていません。
また環境変数の命名規則も同様なようです。
PHPのコーディングをしている時はほぼ無意識的に避けて命名していたのですが、設定ファイル内でのこととあってか、頭から抜けていました。
英字から始まる環境変数名にすることで、無事取得できました!
イージーなミスですが、油断してるとハマりますね。