Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony]bindowanie formularza
trucksweb
post
Post #1





Grupa: Zarejestrowani
Postów: 1 199
Pomógł: 31
Dołączył: 22.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.


--------------------
Rozmawia dwóch dyrektorów:
- Jaki jest twój ideał sekretarki?
- 20-letnia dziewczyna z 30-letnim doświadczeniem.
Go to the top of the page
+Quote Post
arecki
post
Post #2





Grupa: Zarejestrowani
Postów: 222
Pomógł: 35
Dołączył: 6.02.2005

Ostrzeżenie: (0%)
-----


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.  


--------------------
Go to the top of the page
+Quote Post
trucksweb
post
Post #3





Grupa: Zarejestrowani
Postów: 1 199
Pomógł: 31
Dołączył: 22.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 ?


--------------------
Rozmawia dwóch dyrektorów:
- Jaki jest twój ideał sekretarki?
- 20-letnia dziewczyna z 30-letnim doświadczeniem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 02:54