Ich muss sicherstellen, dass ein E-Mail-Feld für die aktuelle Kontakte Tabelle eindeutig ist, und ich möchte sicherstellen, dass gleiche E-Mail an die Benutzer-Tabelle als auch einzigartig ist. Wenn es in keiner der beiden Tabellen gefunden wird, lassen Sie die Daten speichern.Validate E-Mail über 2 Tabellen mit benutzerdefinierten Validator in CakePHP 3.x
Ich bin nicht sicher, ob ich die Daten in der besten Art und Weise bin abruft. Dies ist die einzige Möglichkeit, die ich gefunden habe.
Auch kann ich den benutzerdefinierten Scheck an der Arbeit, und es wird falsch zurück, wenn die E-Mail vorhanden ist, und dann, wenn die E-Mail nicht funktioniert existiert, aber es spart noch die Daten. Ich bin mir nicht sicher, wie ich die Daten nicht speichern soll, wenn die E-Mail gefunden wurde.
Hier ist meine Kontakte Tischmodell zur Zeit:
<?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;
}
}
}
Ich musste den Kuchen-Cache leeren und jetzt funktioniert es größtenteils richtig. Das Problem, das ich jetzt habe, ist, dass die Nachricht nicht angezeigt wird, wenn das Feld nicht validiert wird. – Battousai