SHIRANGANA Laravelの便利なValidationルール 忍者ブログ
エンジニア日記
Admin / Write
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

LaraveのValidationは大変使いやすいです。
業務システムを作るとき、わりと使いやすいけど調べてもわかりにくいルールを 備忘録として書いておきます。

unique
よくある重複チェック。DB内を検索してくれます。
すべての検索条件が=(イコール)でチェックできるならこんな書き方ができます。

<?php
// 必須ですよ|自分のid以外のcompany_idとshop_idが同じ商品の中でユニークじゃないとだめですよ
$rules = [
    'item_code' => 'required|unique:items,item_code,'.$my_id.',id,company_id,'.$my_company_id.',shop_id,',$my_shop_id;
];

実際は下記の構成になっています。
unique:{テーブル名},{対象カラム名},{除外条件の値},{←のカラム名(id等)},{where カラム1},{←の値},{and カラム2},{←の値}, ...

required_if
一緒に渡されたパラメータの値を見て、特定の条件だったら必須とする。

<?php
// 数字ですよ|typeがstudentの時だけ必須ですよ
$rules = [
    'age' => 'numeric|required_if:type,student';
];

before (after)
日付に適用できるフィルタ。以前、以後を表現できる。

<
?php
// 必須ですよ|日付ですよ|今日より前である必要がありますよ
$rules = [
    'birth_date' => 'required|date|before:'.date('Y-m-d');
];
// 一緒に渡されたto_dateより前である必要がありますよ
$rules = [
    'from_date' => 'date|before:to_date';
];

ちなみに、たいていValidationのルール定義はFormRequest内のrules()メソッドで返すのが定石ですが
特殊な入力フローを使っていて、Controller等でValidationを行いたい時もあると思います。
そんな時はこんな感じでもかけます。

<?php
// 手動でValidatorを作るよ
$validator = Validator::make($params,  [
    // rules...
]);
// Validateしてエラーがあったら
if ($validator->fails()) {
    // エラーメッセージと入力された値を持って入力画面に戻るよ
    return redirect()->route('edit_page_route_name')->withErrors($validator)->withInput();
}

Laravelのすごいところは、たいていの事を網羅してくれているところだと思います。
Laravelの実装機能の範囲内で対応できない要件は、完全に特殊な入力をする必要があるか
そもそもの考え方や設計がおかしいかのどちらかなので、
書いていく中で「行き詰まる事」が「状況整理のタイミング」として
考えず書き進めるような事を避ける癖が付いていくのが嬉しいですね。

PR
この記事にコメントする
Name :
Title :
Mail :
URL :
Color :   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Comment :
Password :
HOME | 27  25  18  16  13  10  7  5 

忍者ブログ [PR]