🍈
Laravel 12のDB接続とかCSRF無効化とか
何に困ったか
- Laravel 12 にて、
.env.testing
がうまく読み込まれなかった - CSRFをテスト環境で無効化したかった
手順
phpunit.xml
の env にDBの設定をする。そして、 APP_ENV
に testing
を指定
php artisan cache:clear
でcache をクリア
これで完了。
なぜうまくいかなかったのか
csrfの無効化には App\Http\Middleware\VerifyCsrfToken
をいじるのが一般的でしたが、Laravel 11.x ぐらいで変更が入った(low confidence)らしい。そもそもVerifyCsrfTokenが初期では削除され、ValidateCsrfToken
に名前が変わっていたり、middleware
ではない場所に移動したらしい。
さらにミスなのは、別にこれをいじる必要はなかったということ。上記の方法は、非テスト環境での csrf チェックを無効化するもの。テスト環境ではデフォルトでチェックは行われない。
では、なぜこれがうまくいかなかったのか。それは、参照している環境変数が違ったからっぽい。私は、.env.testing
環境変数を設定し、$ php artisan config:cache
で設定をcacheしていたが、単に phpunit.xml
に記載するだけで問題は起きなくなる。そして、cacheをclearすればphpunit.xml
を参照するようになり、OKというわけだった。
余談
php artisan config:cache
というコマンドは開発環境では使うべきではない。なぜなら、頻繁に変更をし、その度にcacheをする必要があるから。もちろんプロダクション環境ではcacheすべきですが。
その辺の話はdocsにあるので、もっと読みたい(https://laravel.com/docs/12.x/configuration#configuration-caching)
Discussion