独自のバリデーションルールを作成する
クロージャとして組み込む
<?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
所感
今回は時間がないのでクロージャのみ
onとかprovider?とかあるし、ビヘイビアとかで共通利用したいのでいろいろもう少し調べる必要がありそう。
ただ、いきなりvenderのデータが消えたのでなんかアクセスされているかもしれないからちょっと調べて置かないと