🍈

Laravel 12のDB接続とかCSRF無効化とか

に公開

何に困ったか

  • Laravel 12 にて、.env.testingがうまく読み込まれなかった
  • CSRFをテスト環境で無効化したかった

手順

phpunit.xml の env にDBの設定をする。そして、 APP_ENVtesting を指定

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