t_28
@t_28 (R .T)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

CakePHP4 $validatorでエラーメッセージを出したい

解決したいこと

 面談参加者が重複していますというエラーメッセージの出し方を変更したい。

 現状、コントローラーの方で下記のようにすることで写真(1枚目)のようにメッセージを出しています。

$this->Flash->error(('参加者名が重複しています。'));

 しかし、ModelのTbaleで記載している$validatorに記述して写真(2枚目)の面談参加者セレクトボックスの下にエラーメッセージを出せるようにしたいです。

 同一の面談参加者が2人以上いる場合にエラーとなるようにしています。(画像で言えばラムが選択されたボックスがもう一つあればアウト)

スクリーンショット (214).png
スクリーンショット (216).png

発生している問題・エラー

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

1Answer

エラーについてはpatchEntitiesに入れている$newInterviews
何も入っていないのが原因かと思います。
又、Tableクラスであれば$thisだけで自身のテーブルクラスがインスタンス化されているのでNewInterviewsはいらないかと思います。

0Like

Your answer might help someone💌