전자 메일 필드가 현재 연락처 테이블에 대해 고유해야하며 동일한 전자 메일이 사용자 테이블에도 고유해야합니다. 두 테이블 중 하나라도 없으면 데이터를 저장하십시오.CakePHP 3.x에서 사용자 정의 유효성 검사기를 사용하여 두 개의 테이블에서 전자 메일 유효성 확인
가장 좋은 방법으로 데이터를 검색하고 있는지 확실하지 않습니다. 이것은 제가 일하는 유일한 방법입니다.
또한 사용자 정의 검사가 작동하도록 만들 수 있으며 전자 메일이 존재하면 false를 반환하고 전자 메일이 존재하지 않으면 true를 반환하지만 여전히 데이터를 저장합니다. 전자 메일을 찾은 경우 데이터를 저장하지 않도록 지시하는 방법을 모릅니다. 여기
현재 내 연락처 테이블 모델 :<?php
namespace App\Model\Table;
use App\Model\Entity\Contact;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\ORM\TableRegistry;
use Cake\Validation\Validator;
/**
* Contacts Model
*/
class ContactsTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
$this->table('contacts');
$this->displayField('first_name');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
}
/**
* Default validation rules.
*
* @param \Cake\Validation\Validator $validator Validator instance.
* @return \Cake\Validation\Validator
*/
public function validationDefault(Validator $validator)
{
$validator
->allowEmpty('id', 'create');
$validator
->add('email', [
'validateEmail' => [
'rule' => 'validateEmail',
'provider' => 'table',
'message' => 'That email already exists'
]
])
->requirePresence('email', 'create')
->notEmpty('email');
return $validator;
}
//check that the email is unique in both the Contacts table and in the Users table
public function validateEmail($value, $context) {
$usersTable = TableRegistry::get('Users');
$contactsTable = TableRegistry::get('Contacts');
if ($contactsTable->exists(['email' => $value]) || $usersTable->exists(['email' => $value])) {
return false;
} else {
return true;
}
}
}
케이크 캐시를 지워야했으며 이제는 대부분 올바르게 작동합니다. 지금 문제는 필드가 유효성을 검사하지 않을 때 메시지가 표시되지 않는 것입니다. – Battousai