ZF – Weryfikacja unikalności adresu e-mail w bazie danych

Kolejne doświadczenie – kolejny wpis :)

Tym razem zmierzymy się z czymś, co każdy programista musi zaimplementować podczas tworzenia formularza do rejestracji użytkowników. Jest to weryfikacja nazwy bądź adresu e-mail nowego użytkownika w celu unikalności nazwy. Można rozwiązać to na kilka sposobów, np. w kontrolerze pobrać wartość w formularzu a następnie sprawdzić za pomocą metody z modelu czy dany wpis istnieje, ALBO…

… wykorzystać dostępny walidator, stworzony do tego celu o nazwie Db_RecordExists i Db_NoRecordExists. Jego zadaniem jest sprawdzenie wartości w zdefiniowanej tabeli i kolumnie. Dlaczego to rozwiązanie jest lepsze? Kilka powodów:

  1. Weryfikacja odbywa się w obrębie obiektu-formularza. Dzięki temu zachowujemy porządek przy stosowaniu walidatorów a także przy możliwej modyfikacji kodu.
  2. Zajmuje dużo mniej miejsca i czasu, niż pisanie własnych metod wywoływanych w kontrolerach

W jaki sposób to wywołać? Krótki przykład:

  1. $mail = new Zend_Form_Element_Text('mail');
  2. $mail->setLabel('Adres e-mail:');
  3. $mail->setRequired(true);
  4. $mail->addValidators(array(
  5. new Zend_Validate_NotEmpty(),
  6. new Zend_Validate_EmailAddress(),
  7. new Zend_Validate_Db_NoRecordExists(array(
  8. 'table' => 'user',
  9. 'field' => 'use_mail'
  10. ))
  11. ));

Jako parametry podajemy nazwę tabeli i kolumny, która służy do weryfikacji konta. Jak widać użycie tego walidatora jest bardzo proste i przyjemne.