0
我需要確保電子郵件字段對於當前聯繫人表是唯一的,並且我希望確保同一電子郵件對於用戶表也是唯一的。如果在任一表中都找不到,則允許保存數據。使用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