Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Zend_Form - blokowanie wyświetlania błędów o pustym polu
Forum PHP.pl > Forum > PHP > Frameworki
Sajrox
Witam,

Właśnie bawię się Zend_Form i mam pewien problem z komunikatami błędów. Otóż tworze pole formularza:

  1. # Tworzenie pola title
  2. $this->addElement('text', 'title', array(
  3.   'label' => 'Tytuł strony:',
  4.    'validators' => array('Required', 'NotEmpty'),
  5.   'required' => true,
  6. ));


Kiedy wypełnie pole niepoprawnieto uruchamia się moja klasa "Required" jednak gdy nic nie wpisze i wyśle formularzaż to oczywiście pojawia się mój komunikat o błędzie z mojej klasy Required oraz domyslny komunikat Zenda:

Value is required and can't be empty

Jak mogę wyłączyć ten komunikat questionmark.gif Chciałbym sam w mojej klasie "Required" sprawdzać czy pole zostało wypełnione oraz czy poprawnie i wyświetlić własny komunikat o błędzie.


Myślę też nad tym aby w ogóle wyłączyć domyślne wyświetlanie komunikatów i wyświetlić je we własnym zakresie nad każdym polem input w pętli. Pytanie tylko jak wyłączyć błędy i pobrać je do pętli?


Drugie pytanie jest takie. Czy da się wyświetlić te błędy nad polem INPUT questionmark.gif
viking
$options = array(
'notEmptyMessage' => "A non-empty value is required for field '%field%'"
);

Do tego masz stałe do każdego błędu:

Zend_Validate_Between::NOT_BETWEEN =>
'Month value %value% must be between ' .
'%min% and %max%'

Możesz je też bezpośrednio do translatora wrzucić. Generalnie czytaj dokumentację.
Sajrox
Jednak zrobiłem inaczej. Znalażłem jak zdefiniować komunikaty dla określonego błędu:

  1.  
  2.  
  3. # Tworzenie pola title
  4. $this->addElement('text', 'title', array(
  5. 'label' => 'Tytuł strony:',
  6. 'validators' => array(
  7. array('NotEmpty', true, array(
  8. 'messages' => array(
  9. 'isEmpty' => 'Pole nie może być puste'
  10. ))),
  11. array('StringLength', true, array(
  12. 'min' => false,
  13. 'max' => '200',
  14. 'messages' => array(
  15. 'stringLengthTooLong' => 'Wartość jest zbyt długi. Maksymalna ilość znaków wynosi %max%.'
  16. ))),
  17. array('Alnum', true, array(
  18. 'messages' => array(
  19. 'notAlnum' => 'Pole może składać się wyłącznie z liter i cyfr.'
  20. )))
  21. ),
  22. 'required' => true,
  23. 'class' => 'text',
  24. ));
  25.  
  26.  


Potem to pewnie połączę z Translatorem jak już będę wiedział o co w nim chodzi winksmiley.jpg

A wiesz może jak wyłączyć pokazywanie Labela dla przycisków questionmark.gif

Chodzi o to że przy przycisku w formularzu dodaje mi pole label z taką wartością jak value przycisku :/

  1.  
  2. # Tworzenie przycisku
  3. $this->addElement('submit', 'save', array(
  4. 'label' => 'Wyślij',
  5. ));
  6.  
  7.  


seth-kk
Cytat(Sajrox @ 6.09.2009, 18:01:55 ) *
A wiesz może jak wyłączyć pokazywanie Labela dla przycisków questionmark.gif

Chodzi o to że przy przycisku w formularzu dodaje mi pole label z taką wartością jak value przycisku :/

hmm nie spotkalem sie z tym jeszcze, mozliwe ze cos dodaje do tego elementu decorator 'Label' i trzeba go usunac
co do pierwszego problemu to dlaczego dajesz required=true skoro nie chcesz zeby bylo to automatycznie weryfikowane?
Sajrox
Cytat(seth-kk @ 6.09.2009, 22:48:52 ) *
hmm nie spotkalem sie z tym jeszcze, mozliwe ze cos dodaje do tego elementu decorator 'Label' i trzeba go usunac
co do pierwszego problemu to dlaczego dajesz required=true skoro nie chcesz zeby bylo to automatycznie weryfikowane?



Bez require=true gdy nic nie podam w polu input to nie wyświtla mi komunikatu o błędzie mimo tego że mam ustawione 'NotEmpty'.
gdzieś przeczytalem że aby działało 'NotEmpty' musimy uzyć require=true.

Sprawy z Labelem do przyciskó rozwiązłem na razie w taki sposób że przyciski obudowałem w element <div class="button">...</div>
A w stylach css dałem:
  1. div.buttons label {
  2. display: none;
  3. }


A oto kod jak pogrupowałem przyciski:
  1. $this->addDisplayGroup(array('save', 'reset'), 'Buttons')
  2. ->setDisplayGroupDecorators(array(
  3. 'FormElements',
  4. 'data'=>'HtmlTag'
  5. ),
  6. 'tag'=>'div',
  7. 'class'=>'buttons'
  8. )
  9. ),
  10. ));


Pozwala to także wyświetlić przyciski jeden obok drugiego Pod warunkiem że dodamy do styli css:
  1. div.buttons div.element {
  2. float: left;
  3. }


smile.gif

A co do Tłumaczeń tekstów to jeszcze to studiuję. Na razie nie mogę tego skumać dokładnie, ale mam nadzieję że to kwestia czasu winksmiley.jpg
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.