Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Porównywanie zawartości dwóch pól formularza
Forum PHP.pl > Forum > PHP > Frameworki
sweter
Witam,
chcę napisać własny walidator, który sprawdzałby czy w dwóch polach formularza podano dwie takie same wartości. Chcę to zastosować oczywiście przy rejestracji, kiedy user będzie ustawiał swoje hasło do systemu.

Tak więc utworzyłem własny walidator o nazwie TheSameValue. Przykładowy formularz wykorzystujący ten walidator wygląda tak (pokazuje tylko najistotniejszy fragment):
  1. $password_repeat = new Zend_Form_Element_Password('password_repeat');
  2. $password_repeat->setLabel('Powtórz hasło:')
  3. ->setRequired(true)
  4. ->addValidator(new Zend_Validate_StringLength(array('min' => 6, 'max' => 255)));
  5.  
  6. $password = new Zend_Form_Element_Password('password');
  7. $password->setLabel('Hasło:')
  8. ->setRequired(true)
  9. ->addValidator(new Zend_Validate_StringLength(array('min' => 6, 'max' => 255)))
  10. ->addValidator(new Zend_Validate_TheSameValue($password_repeat));


Jak widać, w ostatniej linijce przekazuje mój walidator. Do konstruktora podałem drugie pole na hasło.

Na razie w walidatorze zająłem się wyświetlaniem danych. Jednak to mam problem.
  1. public function __construct($value_repeat_ob) {
  2. $this->value_repeat_ob = $value_repeat_ob;
  3. }
  4.  
  5. public function isValid($value) {
  6. var_dump ($this->value_repeat_ob->getValue());
  7. }


Problem pojawia się w metodzie isValid(): kiedy przysyłam w formularzu jakieś wartości to
  1. var_dump ($this->value_repeat_ob->getValue());

zwraca mi NULL'a.
Dlaczego tak się dzieje? W jaki sposób mogę dobrać się do wartości drugiego pola?
Pozdrawiam
d3ut3r
Co prawda nie długo pracuję z ZF ale mój problem z powtórzeniem hasła skończył się po przeczytaniu:

http://framework.zend.com/manual/1.11/en/z...al.formelements

sweter
Hah smile.gif A wystarczyło przeczytać dokumentacje...
Dzięki smile.gif
piotr.pasich
Proponuję od razu umieszczać rozwiązania pod pytaniami, bo potem googlowicze nie mogą trafić:

Odpowiedni validator istnieje w zendzie:

  1. $form->addElement('password', 'elementOne');
  2. $form->addElement('password', 'elementTwo', array(
  3. 'validators' => array(
  4. array('identical', false, array('token' => 'elementOne'))
  5. )
  6. ));
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.