Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]bindowanie formularza
Forum PHP.pl > Forum > PHP > Frameworki
trucksweb
mam formularz rejestracyjny, ktory sklada sie z pol do tworzenia konta uzytkownika i firmy. jest takze flaga -ktora rozpoznaje czy ma to byc konto firmowe jesli checkbox nie jest zaznaczony to ma nie walidowac pol odpowiedzialnych za konto firmowe.

Chcialem to zrobic w ten sposob ze nadpisze sobie funkcje bind w metodzie formularza:

  1. public function bind(array $formValues = null, array $formFiles = null)
  2. {
  3.  
  4.  
  5. if(!isset($formValues['flag_firm']))
  6. {
  7. $this['firm_name'],
  8. $this['firm_nip'],
  9. $this['firm_street'],
  10. );
  11. }
  12. parent::bind($formValues);
  13. }


ale teraz jak usune dane firmowe to wywala blad ze nie sa znane widgety odpowiedzialne za wyswietlanie pol formularza - firmowego.


W jaki inny sposob moge tego dokoac ?
Najlepiej zrobic dwa formularze jednak chcialem to upchnac w jednym bo kazde konto moze miec tylko jedna firme.
arecki
Możesz to zrobić na dwa sposoby. Pierwszy to ustaw walidatory na pola które są wspólne dla obu kont a dla reszty daj sfValidatorPass. Poza tym zrób post walidatora z sfValidatorCallback i w osobnej funkcji sprawdzaj resztę zależnych pól. A drugi to dla wybranych pól ustaw walidator w taki sposób (trochę nieeleganckie ale działa):

  1.  
  2. $this->setValidators(array(
  3. 'firm_name' => new sfValidatorString(array(
  4. 'required' => intval(sfContext::getInstance()->getRequest()->getParameter('flag_firm', 0)) == 1 ? true : false,
  5. ), array(
  6. 'required' => 'Pole "Nazwa firmy" jest wymagane',
  7. )),
  8. 'firm_nip' => new sfValidatorString(array(
  9. 'required' => intval(sfContext::getInstance()->getRequest()->getParameter('flag_firm', 0)) == 1 ? true : false,
  10. ), array(
  11. 'required' => 'Pole "Nip firmy" jest wymagane',
  12. )),
  13. 'firm_street' => new sfValidatorString(array(
  14. 'required' => intval(sfContext::getInstance()->getRequest()->getParameter('flag_firm', 0)) == 1 ? true : false,
  15. ), array(
  16. 'required' => 'Pole "Adres firmy" jest wymagane',
  17. )),
  18. ))
  19.  
trucksweb
oo dzieki, zastosuje sie do pierwszego przykladu - bradziej chyba poprawniejszy snitch.gif



zrobilem cos takiego:
  1. $this->setValidators(array(
  2. ..
  3. 'firm_name' => new sfValidatorPass(),
  4. ));


  1. $this->validatorSchema->setPostValidator(new sfValidatorCallback(array(
  2. 'callback' => array($this, 'validateSchema'),
  3. )));


  1. public function validateSchema(sfValidatorBase $validator, array $values)
  2. {
  3. //print_r($values);exit;
  4. if ($values['flag_firm'] == 1 &&
  5. !$values['firm_name'])
  6. {
  7. throw new sfValidatorErrorSchema($validator, array(
  8. 'firm_name' => new sfValidatorError($validator, 'error msg'),
  9. // 'firm_name' => new sfValidatorString(array('max_length' => 1024)),
  10. // 'firm_street' => new sfValidatorString(array('max_length' => 1024)),
  11. ));
  12. }
  13. }



i mam problem bo taka walidacja nie spelnia moich wymagan - chcialbym uzywac wbudowanych walidatorow np do maila czy pol select.
Czy jest mozliwosc podlaczenia tego w taki sposob jak w powyzszych zakomentowanych liniach ?
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.