🍈
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