CakePHP3になって、CakePHP2では MultivalidatableBehavior などで実現していたバリデーションのルールセットの切り替えがコア機能に入りました。これはうれしい。
ただ、Kagasawa-sanが作っていたcakeplus/ValidationPatternsBehavior.php で実現していたバリデーションのパターンの設定はコア機能ではできなかったので作ってみました。
Before
<?php namespace App\Model\Table; class UsersTable extends AppTable { public function validationDefault(Validator $validator) { $validator ->integer('id') ->allowEmpty('id', 'create'); $validator ->allowEmpty('username') ->add('username', 'minLength4', [ 'rule' => ['minLength', 4], 'message' => __('Validation Error: minLength4'), ]) ->add('username', 'maxLength10', [ 'rule' => ['maxLength', 10], 'message' => __('Validation Error: maxLength10'), ]); $validator ->allowEmpty('password'); } }
After
<?php namespace App\Model\Table; class UsersTable extends AppTable { public function validationDefault(Validator $validator) { $validator ->addPattern('id', ['integer', 'allowEmptyWhenCreate']); $validator ->addPattern('username', ['allowEmpty', 'username_length']); $validator ->appPattern('password', ['allowEmpty']); } }
非常にスッキリしますね。
使い方
AppTableなどで、以下のように_validatorClass
を変更して、あとはcakeplus/ValidationPatternsBehavior.phpと同じように、バリデーションのパターンを登録していけばOKです。
<?php namespace App\Model\Table; class AppTable extends Table { public function initialize(array $config) { parent::initialize($config); $this->_validatorClass = '\PatternedValidator\Validation\Validator'; \PatternedValidator\Validation\Validator::$validationPatterns = [ 'username_length' => [ 'minLength4' => [ 'rule' => ['minLength', 4], 'message' => __('Validation Error: minLength4'), ], 'maxLength10' => [ 'rule' => ['maxLength', 10], 'message' => __('Validation Error: maxLength10'), ] ], ]; } }
これで多くなりがちなバリデーションライフもバッチリです。
というわけで、私のCakePHP3 Plugin生活、スタートです!