cakephp3 での custom validation についてと,ちょっとした tips みたいなものを.
基本的にはドキュメントに書いて有るとおりですが,ドキュメントになさそうなことを少し.
custiom valudation ですが,
$validator->add('title', 'custom', [
'rule' => function ($value, $context) use ($extra) {
// Custom logic that returns true/false
}
]);
と書くと書かれていますが,2番目の引数の "custom" って何じゃラホイって思ったら error() 時の配列の key のようですね.
$errors = $validator->errors();
で得られる $errors 配列に $errors['hoge']['custom']['message'] と入っているみたいです.まぁ,自分でエラーメッセージ表示する時にはちょっと意識しないとダメかもしれないけど,FormHelper 使ってエラーメッセージ表示する分には意識することはなさそうかな.
あと,たとえばユーザ登録とかで
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
// patchEntity 関数で validation 実行
$user = $this->Users->patchEntity($user, $this->request->data);
if (!$user->errors()) {
// save
}
}
else {
$this->set(compact('user'));
}
とやると validation メッセージが表示されないです.post 時に $user に errors が追加された物が template 側に渡されないからですね.post 時にも validation 後の $user を渡すように
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
// patchEntity 関数で validation 実行
$user = $this->Users->patchEntity($user, $this->request->data);
if (!$user->errors()) {
// save
}
}
$this->set(compact('user'));
として else の外に置いておく必要があるですね.