Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework][ZF2][ZendFramework2] Formularze
Forum PHP.pl > Forum > PHP > Frameworki
aras785
Witam. Posiadam formularz:
  1. namespace Application\Form;
  2.  
  3. use Zend\Form\Form;
  4.  
  5. class ContactForm extends Form
  6. {
  7. public function __construct()
  8. {
  9. parent::__construct();
  10. $this->setAttribute('method', 'post');
  11. $this->setAttribute('action', '');
  12. $this->add(array(
  13. 'name' => 'name',
  14. 'required' => true,
  15. 'type' => 'Text',
  16. 'options' => array(
  17. 'label' => 'Name',
  18. ),
  19. ));
  20. $this->add(array(
  21. 'name' => 'email',
  22. 'required' => true,
  23. 'type' => 'Text',
  24. 'options' => array(
  25. 'label' => 'Email',
  26. ),
  27. ));
  28. $this->add(array(
  29. 'name' => 'text',
  30. 'required' => true,
  31. 'type' => 'Textarea',
  32. 'options' => array(
  33. 'label' => 'Text',
  34. ),
  35. ));
  36. $this->add(array(
  37. 'name' => 'submit',
  38. 'type' => 'Submit',
  39. 'attributes' => array(
  40. 'value' => 'Go',
  41. 'id' => 'submitbutton',
  42. ),
  43. ));
  44. }
  45. }


w controllerze przekazuje go do widoku
  1. $form = new ContactForm();
  2. return new ViewModel(array('form'=>$form));

I to działa wszystko. Rozchodzi mi się o funkcję isValid. Mam przykładowo:
  1. public function indexAction()
  2. {
  3. $request = $this->getRequest();
  4. $form = new ContactForm();
  5. $data = $request->getPost();
  6. $form->setData($data);
  7. if($form->isValid()) {
  8. $data = $form->getData();
  9. echo('ok');
  10. }else echo 'zle';
  11.  
  12. $array = array('form'=>$form);
  13. return new ViewModel($array);
  14.  
  15. }
i nie wypełniając żadnego pola to tak daje wynik: ok
+ prosze wytłumaczcie mi o co chodzi z funkcja $form->getData skoro i tak pokazują aby pobierac dane z klasy request? ($this->getRequest()->getPost());

ktoś pomoże?

@up smile.gif
RiE
Dzieje się tak, ponieważ metoda isValid() sprawdza czy dane podane przez użytkownika są poprawne tj. przechodzą walidację.
Ty natomiast nie masz żadnej walidacji, dlatego wyświetla 'ok'.
Odnośnie tego:
  1. 'required' => true


Nie jestem pewny czy wyżej wymieniony parametr przyjmuje wartość true, natomiast jestem pewny że przyjmuje wartość 'required' gdyż jest to atrybut pola formularza
  1. <input type="text" name="field_1" required="required">


Jak zrobić aby formularz poddawany był walidacji?

W modelu utwórz akcję w której zadeklarujesz validatory, filtry. Np:

Register\Model\RegisterUser

  1. public function mojaValidacja()
  2. {
  3. $inputFilter = new InputFilter();
  4. $factory = new InputFactory();
  5.  
  6. $inputFilter->add($factory->createInput(array(
  7. 'name' => 'password',
  8. 'required' => true, // Dopiero ten parametr oznacza że pole jest wymagane. Jest on zbędny bo z tego co mi wiadomo domyślnie każde pole ma required = true.
  9. 'filters' => array(
  10. array('name' => 'StripTags'),
  11. array('name' => 'StringTrim'),
  12. ),
  13. 'validators' => array(
  14. 'name' => 'StringLength',
  15. 'options' => array(
  16. 'encoding' => 'UTF-8',
  17. 'min' => 6,
  18. 'max' => 100,
  19. ),
  20. ),
  21. 'name' => 'NotEmpty',
  22. 'options' => array(
  23. 'messages' => array(
  24. NotEmpty::IS_EMPTY => 'Mój własny komunikat w przypadku kiedy pole jest puste'
  25. )
  26. )
  27. )
  28. ),
  29. )));
  30. ...
  31. return $inputFilter;
  32. }


W kontrolerze:

  1. public function indexAction()
  2. {
  3. $form = new RegisterForm();
  4.  
  5. $request = $this->getRequest();
  6. if ($request->isPost()) {
  7. $registerUser = new RegisterUser();
  8. $form->setInputFilter($registerUser->mojaValidacja());
  9. $form->setData($request->getPost());
  10.  
  11. if($form->isValid()) {
  12. $validated_data = $form->getData();
  13. // kod wykonany po przejściu walidacji
  14. }
  15. }
  16. return array('form' => $form);
  17. }


Wtedy nasze dane poddawane są walidacji.

Cytat
prosze wytłumaczcie mi o co chodzi z funkcja $form->getData skoro i tak pokazują aby pobierac dane z klasy request? ($this->getRequest()->getPost());


Ten kod:
  1. $this->getRequest()->getPost();


Zwraca dane wpisane przez użytkownika

Kod:
  1. $form->getData();


Zwraca dane po walidacji

Wobraź sobie że użytkownik wpisuje w polu hasło takie coś:
<p>mojetajnehaslo</p>

Jeżeli po metodzie isValid() nie pobierzesz przefiltrowanych danych to walidacja nie ma zbytnio sensu. Ponieważ dalej będziesz operował na danych wpisanych przez użytkownika, a nie przefiltrowanych.
aras785
Dzięki mistrzu ! smile.gif Lepiej to wytłumaczyłeś niż na zf2 jest opisane:) Dziękuje
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.