CakePHP4 $validatorでエラーメッセージを出したい
解決したいこと
面談参加者が重複していますというエラーメッセージの出し方を変更したい。
現状、コントローラーの方で下記のようにすることで写真(1枚目)のようにメッセージを出しています。
$this->Flash->error(('参加者名が重複しています。'));
しかし、ModelのTbaleで記載している$validatorに記述して写真(2枚目)の面談参加者セレクトボックスの下にエラーメッセージを出せるようにしたいです。
同一の面談参加者が2人以上いる場合にエラーとなるようにしています。(画像で言えばラムが選択されたボックスがもう一つあればアウト)
発生している問題・エラー
ModelのTbale、$validatorを修正し、ブラウザで動作確認した際に下記のエラーが出ました。原因が分からないので対処の仕方が分かりません。
Undefined property NewInterviews. You have not defined the NewInterviews association on App\Model\Table\NewInterviewsTable.
該当するソースコード(いずれ実装したい)
NewInterviewsTable.php
public function validationDefault(Validator $validator): Validator
{
$validator
->requirePresence('new_employee_id')
->integer('new_employee_id')
->notEmpty('new_employee_id','面談参加者が入力されていません')
->add('new_employee_id',[
'Check' =>[
'rule' =>[$this, 'duplicationCheck'],
'message' => '参加者名が重複しています。'
]]);
return $validator;
}
public function duplicationCheck($value){
$newInterviews = $this->NewInterviews->patchEntities($newInterviews,$data);
// 面談参加者重複チェックフラグ 0→重複無し 1→重複あり
$duplicate_flg = 0;
if($duplicate_flg == 1){
$this->Flash->error(('参加者名が重複しています。'));
}
}
controllerでメッセージを出しているソースコード(現状)
該当す箇所のみなので、赤線入っていますが、元のソースコードに異常はございません。
NewInterviewsController.php
$newInterviews = $this->NewInterviews->patchEntities($newInterviews,$data);
// 面談参加者重複チェックフラグ 0→重複無し 1→重複あり
$duplicate_flg = 0;
// 面談参加者重複チェック
for($i = 0; $i < count($newInterviews); $i++){
for($j = 0; $j < $i; $j++){
if($newInterviews[$i] == $newInterviews[$j]){
$duplicate_flg = 1;
break 2;
}
}
}
if ($this->NewInterviews->saveMany($newInterviews) && $duplicate_flg == 0) {
$this->Flash->success(__('面談状況の登録が完了しました。'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('面談状況の登録ができませんでした。'));
if($duplicate_flg == 1){
$this->Flash->error(('参加者名が重複しています。'));
}
アドバイスお願いいたします。
0