m_shige1979のときどきITブログ

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

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

https://github.com/mshige1979

cakephp3のバリデーション2

独自のバリデーションルールを作成する

クロージャとして組み込む
<?php
namespace App\Console\Command;

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

/**
 * Sample2 shell command.
 */
class Sample2Shell extends Shell {

/**
 * main() method.
 *
 * @return bool|int Success or error code.
 */
	public function main() {

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

        // 定義設定
        $validator
            ->validatePresence('name')
            ->add('name', 'custom1', [
                'rule' => function($value, $context){
                    if($value != 100){
                        return true;
                    }else{
                        return false;
                    }
                },
                'message' => 'なんかおかしいよ???'
            ])
        ;
        // チェック
        $data = [
            'name' => '100',
            'age' => '50'
        ];
        // チェック
        $errors = $validator->errors($data);
        var_dump($errors);

	}
}

※ruleの中にfunctionでクロージャとして定義して対応できる

valueとcontext
value ---> 
    string(3) "100"

context --->
array(4) {
  'newRecord' =>
  bool(true)
  'data' =>
  array(1) {
    'name' =>
    string(3) "100"
  }
  'field' =>
  string(4) "name"
  'providers' =>
  array(1) {
    'default' =>
    class Cake\Validation\RulesProvider#37 (1) {
      protected $_class =>
      string(27) "\Cake\Validation\Validation"
    }
  }
}

※contextにはエンティティを使用した際のデータの情報などを設定している感じ

なぜいきなり消えている???

他にも調べようと思ったけどなんかいきなりcakephpのコア機能が消えたので修復するのに時間がかかりそうなのでここで中断

git clone https://github.com/cakephp/cakephp.git -b 3.0.0-alpha1 app/vendor/cakephp/cakephp

※とりあえず、cakephp/cakephpの部分のみ差し替え

所感

今回は時間がないのでクロージャのみ
onとかprovider?とかあるし、ビヘイビアとかで共通利用したいのでいろいろもう少し調べる必要がありそう。

ただ、いきなりvenderのデータが消えたのでなんかアクセスされているかもしれないからちょっと調べて置かないと