DBに入力する値を制限、整形するための方法

Tag:

「DBにデータを入力する手段」、「入力データをLaravelによって制限、整形する方法」について取り上げます。ここでの記事は開発者によって異なりますので、参考程度にしてください。

データはどうやって入力される?

まず、DBにどのようにデータが蓄積されていくのかを考えてみます。

例えば、以下のような方法が考えられます。
・フォームからの入力
・定時時刻にバッチを起動させて外部システムからデータを取得して入力
・マスターデータをDB管理者が直接入力

イメージで表すと以下のようになります。大きく分けると3つの入力手段があります。
db_datainput

入力データの制限、整形

3つの入力手段によって入力されるデータを、Laravelで制限、整形するには次のような方法があるかと思います。

入力手段 制限、整形箇所 何をする?
グローバルミドルウェア CSRFトークン検証など
ルート定義ミドルウェア ※2
コントローラのコンストラクタ定義ミドルウェア ※2
リクエストのバリデーション ・サイズ上限判定、
・有効値(下限、上限)判定、
・フォーマット判定、
・未入力判定、
・入力可能文字列判定(選択フォーム)
など
コントローラのアクションメソッド ※3
1、2 サービスレイヤーのメソッド ※1 ※2
1、2 リポジトリレイヤーのメソッド ※1 ※4
1、2 Eloquent ガード(fillable,guarded)
ミューテタ(setXXX, データの整形)
1、2、3 DB ・外部キー制約
・NOTNULL制約
・DEFAULT
・ON UPDATE CURRENT_TIMESTAMP
など

※1 開発者の設計によって存在するレイヤー。必要に応じて作る。
※2 「セッション内容」や「DB入力データ」と連携して判断する制限(権限チェックなど)
※3 ここで制限判定の責務を持たせるとファットコントローラになると思います。
※4 ここでの責務はデータ(DB、File、Cacheなど)への参照手段の統一なので制限判定自体は上のレイヤーで行うとよいと思います。

スポンサーリンク