m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

cakephp3のバリデーションルール

バリデーションルール

必須
<?php
namespace App\Console\Command;

use Cake\Console\Shell;
use Cake\Validation\Validator;

/**
 * Sample1 shell command.
 */
class Sample5Shell extends Shell {

/**
 * main() method.
 * 任意のバリデータを生成し、チェックする
 * TableオブジェクトやEntityが不要なバージョン
 *
 * @return bool|int Success or error code.
 */
	public function main() {

        // バリデータオブジェクト生成
        $validator = new Validator();

        // 定義設定
        $validator
            ->validatePresence('name')
            ->notEmpty('name', [
                'message' => 'nameが未設定'
            ])
        ;
        // チェック
        $data = [
            'name' => ''
        ];
        // チェック
        $errors = $validator->errors($data);
        var_dump($errors);

	}
}
数字
<?php
namespace App\Console\Command;

use Cake\Console\Shell;
use Cake\Validation\Validator;

/**
 * Sample1 shell command.
 */
class Sample5Shell extends Shell {

/**
 * main() method.
 * 任意のバリデータを生成し、チェックする
 * TableオブジェクトやEntityが不要なバージョン
 *
 * @return bool|int Success or error code.
 */
	public function main() {

        // バリデータオブジェクト生成
        $validator = new Validator();

        // 定義設定
        $validator
            ->validatePresence('num')
            // 必須
            ->notEmpty('num', [
                'message' => 'numが未設定'
            ])
            // 整数、小数を許可
            ->add('num', 'numeric1', [
                'rule' => ['numeric'],
                'message' => 'not numeric'
            ])
            // 符号なし整数のみ
            ->add('num', 'numeric2', [
                'rule' => ['naturalNumber'],
                'message' => 'not naturalNumber'
            ])

        ;
        // チェック
        $data = [
            'num' => 'a'
        ];
        // チェック
        $errors = $validator->errors($data);
        var_dump($errors);

	}
}
英数字
<?php
namespace App\Console\Command;

use Cake\Console\Shell;
use Cake\Validation\Validator;

/**
 * Sample1 shell command.
 */
class Sample5Shell extends Shell {

/**
 * main() method.
 * 任意のバリデータを生成し、チェックする
 * TableオブジェクトやEntityが不要なバージョン
 *
 * @return bool|int Success or error code.
 */
	public function main() {

        // バリデータオブジェクト生成
        $validator = new Validator();

        // 定義設定
        $validator
            ->validatePresence('code')
            // 必須
            ->notEmpty('code', [
                'message' => 'numが未設定'
            ])
            // 半角英数字
            ->add('code', 'alphaNumeric1', [
                'rule' => ['alphaNumeric'],
                'message' => 'not alphaNumeric'
            ])

        ;
        // チェック
        $data = [
            'code' => '_'
        ];
        // チェック
        $errors = $validator->errors($data);
        var_dump($errors);

	}
}
指定文字数
<?php
namespace App\Console\Command;

use Cake\Console\Shell;
use Cake\Validation\Validator;

/**
 * Sample1 shell command.
 */
class Sample5Shell extends Shell {

/**
 * main() method.
 * 任意のバリデータを生成し、チェックする
 * TableオブジェクトやEntityが不要なバージョン
 *
 * @return bool|int Success or error code.
 */
	public function main() {

        // バリデータオブジェクト生成
        $validator = new Validator();

        // 定義設定
        $validator
            ->validatePresence('code')
            // 必須
            ->notEmpty('code', [
                'message' => 'numが未設定'
            ])
            // 指定文字以上であるか
            ->add('code', 'minLength1', [
                'rule' => ['minLength', 5],
                'message' => 'minLengthが5文字未満'
            ])
            // 指定文字以下であるか
            ->add('code', 'maxLength1', [
                'rule' => ['maxLength', 2],
                'message' => 'maxLengthが2文字を超過'
            ])

        ;
        // チェック
        $data = [
            'code' => '1234'
        ];
        // チェック
        $errors = $validator->errors($data);
        var_dump($errors);

	}
}
日付
<?php
namespace App\Console\Command;

use Cake\Console\Shell;
use Cake\Validation\Validator;

/**
 * Sample1 shell command.
 */
class Sample5Shell extends Shell {

/**
 * main() method.
 * 任意のバリデータを生成し、チェックする
 * TableオブジェクトやEntityが不要なバージョン
 *
 * @return bool|int Success or error code.
 */
	public function main() {

        // バリデータオブジェクト生成
        $validator = new Validator();

        // 定義設定
        $validator
            ->validatePresence('code')
            // 必須
            ->notEmpty('code', [
                'message' => 'codeが未設定'
            ])
            // 日付のフォーマットであるか
            ->add('code', 'date1', [
                'rule' => ['date', "ymd"],
                'message' => 'dateがyyyymmdd以外'
            ])

        ;
        // チェック
        $data = [
            //'code' => '2012-10-12',   // 正常
            // 'code' => '2012/10/12'   // 正常
            'code' => '20120401'    // error
        ];
        // チェック
        $errors = $validator->errors($data);
        var_dump($errors);

	}
}
メールアドレス
<?php
namespace App\Console\Command;

use Cake\Console\Shell;
use Cake\Validation\Validator;

/**
 * Sample1 shell command.
 */
class Sample5Shell extends Shell {

/**
 * main() method.
 * 任意のバリデータを生成し、チェックする
 * TableオブジェクトやEntityが不要なバージョン
 *
 * @return bool|int Success or error code.
 */
	public function main() {

        // バリデータオブジェクト生成
        $validator = new Validator();

        // 定義設定
        $validator
            ->validatePresence('code')
            // 必須
            ->notEmpty('code', [
                'message' => 'codeが未設定'
            ])
            // 日付のフォーマットであるか
            ->add('code', 'email1', [
                'rule' => ['email'],
                'message' => 'codeがemailではありません'
            ])

        ;
        // チェック
        $data = [
            //'code' => 'aaa@test.com'
            'code' => 'aaa.@test.com'
        ];
        // チェック
        $errors = $validator->errors($data);
        var_dump($errors);

	}
}
URL
<?php
namespace App\Console\Command;

use Cake\Console\Shell;
use Cake\Validation\Validator;

/**
 * Sample1 shell command.
 */
class Sample5Shell extends Shell {

/**
 * main() method.
 * 任意のバリデータを生成し、チェックする
 * TableオブジェクトやEntityが不要なバージョン
 *
 * @return bool|int Success or error code.
 */
	public function main() {

        // バリデータオブジェクト生成
        $validator = new Validator();

        // 定義設定
        $validator
            ->validatePresence('code')
            // 必須
            ->notEmpty('code', [
                'message' => 'codeが未設定'
            ])
            // 日付のフォーマットであるか
            ->add('code', 'url1', [
                'rule' => ['url'],
                'message' => 'codeがurlではありません'
            ])

        ;
        // チェック
        $data = [
            //'code' => 'http://example.com'
            'code' => '://example.com'
        ];
        // チェック
        $errors = $validator->errors($data);
        var_dump($errors);

	}
}

任意

<?php
namespace App\Console\Command;

use Cake\Console\Shell;
use Cake\Validation\Validator;

/**
 * Sample1 shell command.
 */
class Sample5Shell extends Shell {

/**
 * main() method.
 * 任意のバリデータを生成し、チェックする
 * TableオブジェクトやEntityが不要なバージョン
 *
 * @return bool|int Success or error code.
 */
	public function main() {

        // バリデータオブジェクト生成
        $validator = new Validator();

        // 定義設定
        $validator
            ->validatePresence('code')
            // 任意
            ->allowEmpty('code')
            // 日付のフォーマットであるか
            ->add('code', 'url1', [
                'rule' => ['url'],
                'message' => 'codeがurlではありません'
            ])

        ;
        // チェック
        $data = [
            //'code' => 'http://example.com'
            'code' => ''
        ];
        // チェック
        $errors = $validator->errors($data);
        var_dump($errors);

	}
}

※allowEmptyを指定することでチェックがあってもブランクの場合は無視する

まとめ

基本的なパターンのみ記載しました。
ユニークや独自チェックなどはそのうち調べるかもしれません。