web アプリケーションを公開するにあたって、ユーザーからの入力は避けては通れない。
フクシルでは、掲示板機能と口コミ機能を実装するので、フォームから文字列の入力を受け付けている形である。
入力に不正な値がある場合、もしくは悪意ある攻撃を防ぐために入力バリデーションは欠かすことができない。もちろん、ロジック部分及び、出力時のバリデーションも必要になる。
入力時のバリエーション、特にフロントの部分では、Validatorjs を導入して、submit が機能しない形もとりますが、あくまでそれは補助として行う。
Laravel でロジック部分のバリデーションを行う場合、複数のやり方がある。
1.コントローラー内にべた書きする。
2.フォームリクエストバリデーションを設定する。
3.カスタムバリテーションとして設定する。
4.ミドルウェアとして設定する。
役割と注意点
1.コントローラ内にべた書きする
役割
・手軽に実装したい場合に
注意点
基本的にコントローラ内に書くのは、よくない。
拡張性も悪く、メソッドごとにバリデーションを設定するのは手間で保守性も悪い。
2.フォームリクエストバリデーションを設定する
Laravel5.5 より、フォームリクエストバリデーションを設定することができる。
Artisan コマンドでフォームリクエストバリデーションを生成することができる。
php artisan make:request HogeValidator
フォームリクエストバリデーションを通すことで、コントローラにはバリエーション後の値が渡されるようになる。
役割
・コントローラとバリデーションの切り分け
・コードの簡素化
・保守性の向上
注意点
・フォームごとにバリデーションを設定する必要がある。
・バリデーションを適応する範囲が広い場合は、後述のカスタムバリデーションもしくは、ミドルウェアへの設定を行う。
3.カスタムバリテーションとして設定する
独自のバリデーションルールを設定したい場合は、カスタムバリデーションを使用する。
こちらは、Artisan コマンドの Rule を生成することで、設定できる。
php artisan make:rule HogeRule
生成された Rule 内の passes 内には処理を、message 内には失敗時のメッセージを設定する。
役割
・独自のバリデーションについて保守性の向上と記述の簡素化
注意点
・もっと広い範囲でバリデーションを設定する場合には、ミドルウェアに書き込む。
4.ミドルウェアとして設定する
最後はミドルウェアとして設定する場合について。
ミドルウェアは、アプリケーションへ送信された HTTP リクエストをフィルタリングする役割がある。
そのため、共通したバリデーション、(アプリケーションに値を渡したくないもの)についてはミドルウェアに設定すると抜け、漏れがなく設定することができる。
ミドルウェアも Artisan コマンドから生成することができ、
php artisan make:middleware HogeHoge
で生成することができる。
役割
全てのリクエストに共通したバリデーションを行いたい場合に設定する。
注意点
この部分は共通のバリデーションを設定するだけで、細部に関してはフォームリクエストバリデーションで個別に設定していく必要がある。
まとめ:役割と意図を考えて適切なバリデーションを
バリデーションに関しては、網の目を考えるとイメージしやすい。
〇一番粗いながら、大きな網でざっくりとバリデーションを行い、各入力値に関してはフォームの意図をはっきりさせた後に細かいバリデーションを行う。
〇バリデーションのルールに関しては、保守や管理がしやすいようにカスタムバリデーションを使用すること。
〇コントローラに書くことはあまりせず、フォームバリデーションを行い、コントローラとバリデーションの分離を行うこと。