はじめに
Laravel 6 。ファイルを扱うシンプルな CRUD API の例を作った (今後 Dropzon.js を試すために) – oki2a24 の続きで、バリデーションとそのテストを作りました。
コード。フォームリクエストクラスとそのテスト
フォームリクエストクラスの laravel/app/Http/Requests/Api/FileStoreRequest.php
です。
バリデーションルールは次としました。
- required 。今回の例では、ファイル以外の項目はリクエストボディに存在しないため、必須としました。ファイルの添付がオプションである場合は nullalbe にするなど適宜変更となると思います。
- image 。 file では広すぎで、 mimetypes や mimes では面倒と感じましたので image としました。
- max:2000 。最大 2000 キロバイト、つまりほぼ 2 メガバイトとしました。
フォームリクエストクラスのテストクラスの laravel/tests/Feature/FileStoreRequestTest.php
です。
テスト用のダミーファイルについては、 ファイルアップロードのテスト – HTTPテスト 6.x Laravel を参考にしました。
コード。その他。
フォームリクエストクラスを使うようにしたコントローラクラスの laravel/app/Http/Controllers/Api/FileController.php
です。差分のみを示します。
アクションの引数をフォームリクエストクラスに変更するだけです。コントローラのテストクラスも、成功時のパターンの観点でのみのテストですのでコントローラのテストクラスの変更の必要はありません。もしエラーのパターンもコントローラのテストで行っている場合は、おそらく変更が必要となると思います。
おわりに
ファイルアップロードは文字列を POST するのと勝手が異なりますので、バリデーションする時も少しもたついてしまいます。わかってしまえば、または思い出してしまえば、どうってことはありませんので、そのきっかけとするために、今回投稿いたしました。
以上です。