LoginSignup
5
7

More than 5 years have passed since last update.

CakePHP3でカスタムバリデーションを実装する

Last updated at Posted at 2017-05-11

ディレクトリとファイルの作成

Modelディレクトリの配下にValidationディレクトリを作成し、その中にバリデーションを定義するファイルを作成する。

今回はCustomValidation.phpとする。

Kobito.5yjOIf.png

カスタムバリデーションの定義

今回は例として緯度の書式をチェックする関数を実装する。

<?php
namespace App\Model\Validation;
use Cake\Validation\Validation;

class CustomValidation extends Validation {
  /**
   * 緯度
   * @param string $value
   * @return bool
   */
    public static function isValidLatitude($value) {
        return (bool) preg_match('/^[0-9]+\.[0-9]+$/', $value);
    }

}

カスタムバリデーションの使用方法

使用するModelのTableファイルで上記のカスタムバリデーションを呼び出す。

<?php
namespace App\Model\Table;

use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class SampleTable extends Table
{

    /**
     * Default validation rules.
     *
     * @param \Cake\Validation\Validator $validator Validator instance.
     * @return \Cake\Validation\Validator
     */
    public function validationDefault(Validator $validator)
    {
        $validator->provider('Custom', 'App\Model\Validation\CustomValidation');

        $validator
            ->requirePresence('latitude', 'create')
            ->notEmpty('latitude', "入力されていません")
            ->add('latitude', 'latitudeRule', [
                'rule' => ['isValidLatitude'],
                'provider' => 'Custom',
                'message' => "書式に誤りがあります",
                ]);

この1文でCustomというキーで使用することができる。

    $validator->provider('Custom', 'App\Model\Validation\CustomValidation');

latitudeという項目について、カスタムバリデーションとして定義したisValidLatitude関数でチェックする。(2つ目の引数のlatitudeRuleは任意の文字列)

            ->add('latitude', 'latitudeRule', [
                'rule' => ['isValidLatitude'],
                'provider' => 'Custom',
                'message' => "書式に誤りがあります",
                ]);
5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7