設定のキャッシュと環境に関するチェックを強化します
Laravelはartisanコマンドの--env
オプションやAPP_ENV
環境変数で環境を指定できますが、
設定がキャッシュされているときはそれらの指定が無視されます。
これは潜在的に危険なので、設定がキャッシュされているときは--env
オプションやAPP_ENV
環境変数による環境の指定を禁止します。
config:cache
コマンドにより設定のキャッシュを生成するときに、--env
オプションやAPP_ENV
環境変数による環境の指定を禁止します。
従って、キャッシュできるのは.env
ファイルに記述されたデフォルトの環境のみとなります。
キャッシュを生成するときに使用した.env
ファイルのチェックサムを保存し、現在の.env
ファイルのものと一致するか
チェックします。一致しない場合はエラーにします。
artisanコマンドには環境に依存しないものもあるので、それらについてはチェック対象から除外します。
除外するコマンドを増やしたいときは、config/env_check.php
のexcluded_command
に追加することが出来ます。
composer require crhg/laravel-env-check
php artisan vendor:publish --provider='Crhg\EnvCheck\Providers\EnvCheckServiceProvider'
以下のコードを bootstrap/app.php
の return $app;
の手前に追加します。
$app->singleton(\Crhg\EnvCheck\EnvChecker::class);
$app->beforeBootstrapping(
\Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,
function ($app) {
$checker = $app->make(\Crhg\EnvCheck\EnvChecker::class);
$checker->examineEnvironmentVariables();
}
);
- 設定がキャッシュされているとき:
% php artisan migrate:status --env=foo
Don't use --env option when configuration is cached
config:cache
した後に.env
を書き換えたとき:
% php artisan migrate:status
.env hash unmatch