ラボ > FuelPHP:validation

FuelPHPで独自のvalidationルールの作成

既存のvalidationルールじゃなくて、オリジナルで用意したい。

作成日:2018-01-15, 更新日:2018-07-19

基本

1.独自のvalidationルールを準備
2.独自のvalidationルールを読み込んで実行

以下、「classes/util/validationrule.php」に独自ルールのファイルを用意し、「ルール名:zebra」とする場合。

参考:FuelPHPが用意してくれている各ルール

FuelPHPが用意してくれている各ルールは「/fuel/core/classes/validation.php」の「* The validation methods」以降に記載。

独自のvalidationルールを準備

・戻り値を「true / false」にする。

▼classes/util/validationrule.php

<?php
class Util_Validationrule {
   public static function _validation_zebra($data) {
      if (条件) {
         return true;
      }
      else {
         // エラーにしたいとき
         return false;
      }
   }
}

エラーメッセージの設定

日本語でいく場合:「lang/ja/validation.php」に記載する
fuelphp validationのエラーを日本語表示

'zebra' => エラーメッセージ,

参照:fuelphp validationのエラーを日本語表示

独自のvalidationルールを読み込んで実行

~省略~
$tmpIpt = \Input::post();

// ▼独自のvalidationルールを読み込む
$validName = 'my_fieldset'; // 複数回呼び出さないなら何でもいいと思う。
$validation = \Validation::forge($validName);
$validation->add_callable('Util_Validationrule');

$validation->add('item', '品名')
           ->add_rule(zebra);

$validation->run($tmpIpt);
~省略~

引数を複数使いたい

▼独自ルール側

public static function _validation_zebra($data, 引数1, 引数2) {
~省略~

▼呼び出し側

~省略~
$validation->add('item', '品名')
           ->add_rule(zebra, 引数1, 引数2);
~省略~

複雑なルールにするとき

コレは、あくまで個人的なやり方なので良い・悪いは分からないし、他に良い方法があるかもしれない。

・条件によって「エラー文」を作成
・独自ルールに作成した「エラー文」を渡す
・独自ルール側は、「エラー文があったらエラー」にする。
・バリデーションエラーがあるときは、作成した「エラー文」をそのまま表示。

▼「エラー文があればエラー扱い」という独自ルールを追加(「classes/util/validationrule.php」に追記)

public static function _validation_force_error($data='', $errMes="") {
   if($errMes != '') {
      return false;
   }
   return true;
}

▼呼び出し側

~省略~
if ( 条件 ) {
   // 出力させるエラーメッセージをセット
   $errMes = 表示するエラーメッセージ
}
else {
   $errMes = '';
}
$validation->add(〇〇〇, 〇〇〇)
           ->add_rule('force_error', $errMes);
~省略~

▼エラーメッセージの設定(日本語でいく場合:「lang/ja/validation.php」に記載)

<?php
return array(
   'force_error' => ':param:1',
);

※すでにファイルがあるなら「'force_error' => ':param:1',」を追記。

クロージャーを使う方法もある(※Fuelphpの配列要素のバリデーション

関連項目

fuelphp validationのエラーを日本語表示
Fuelphpの配列要素のバリデーション