Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] pobranie wartości pola w formularzu
blackroger
post
Post #1





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 8.11.2008

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


Dzień dobry. Jak pobrać wartość pola w formularzu.
Kod formularza:
  1.  
  2. class ChangeUserDataForm extends BaseUzytkownicyForm {
  3.  
  4. public function configure() {
  5. $this->setWidgets(array('usid'=>new sfWidgetFormInputHidden(),
  6. 'login'=>new sfWidgetFormInput(),
  7. 'stare_haslo'=>new sfWidgetFormInputPassword(),
  8. 'nowe_haslo'=>new sfWidgetFormInputPassword(),
  9. 'nowe_powtorz'=>new sfWidgetFormInputPassword(),
  10. 'imie'=>new sfWidgetFormInput(),
  11. 'nazwisko'=>new sfWidgetFormInput(),
  12. 'miasto'=>new sfWidgetFormInput(),
  13. 'mail'=>new sfWidgetFormInput(),
  14. 'osobie'=> new sfWidgetFormTextarea()
  15. ));
  16.  
  17. $this->widgetSchema->setNameFormat('change_user[%s]');
  18. ....
  19. .
  20. .
  21. .
  22. .
  23. $sqlo = new Criteria();//tworzymy obiekt do zapytania
  24. $sqlo->add(UzytkownicyPeer::LOGIN, 'xxxxxxxxxxxxxxx-co ja mam tu wpisać');
  25. $uzytkr = UzytkownicyPeer::doSelectOne($sqlo);//szukamy wpisu w uzytkownicy
  26. $zmienna_ze_starym_hasłem = $uzytkr->getHaslo();
  27.  
  28. $this->validatorSchema->setPostValidator(
  29.  
  30. new sfValidatorSchemaCompare(
  31. $zmienna_ze_starym_hasłem, sfValidatorSchemaCompare::EQUAL, 'stare_haslo',
  32. array(),
  33. array('invalid'=>'Błędne hasło!'))
  34.  
  35. );


potrzebuje tej wartości, bo chcę wyciągnąć hasło i władować je do walidatora compare. Jest wogóle taka możliwość w formularzu? Wiem że można to przenieść do akcji i porównać ale chciałbym spróbować tak jeżeli się da...

Ten post edytował blackroger 24.09.2009, 12:07:55
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Berg
post
Post #2





Grupa: Zarejestrowani
Postów: 180
Pomógł: 37
Dołączył: 1.05.2008
Skąd: Białystok

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


  1. if(!$this->isNew) { // Obiekt był już zapisany w bazie danych więc pobranie starego hasła jest możliwe
  2.  
  3. $stare_haslo = $this->getObject()->getHaslo(); // Pobieram stare hasło
  4.  
  5. // Ustawiam walidator
  6. $this->validatorSchema->setPostValidator(new sfValidatorSchemaCompare(
  7. $stare_haslo, sfValidatorSchemaCompare::EQUAL, 'haslo',
  8. array(),
  9. array('invalid'=>'Błędne hasło!'))
  10. );
  11. }
Go to the top of the page
+Quote Post
blackroger
post
Post #3





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 8.11.2008

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


Ok....wielkie dzięki....a jakbyś mógł mi jeszcze powiedzieć jak po prostu pobrać wartość widgeta do zmiennej, bo muszę to hasło podane w formularzu potraktować md5?

Ten post edytował blackroger 24.09.2009, 12:43:32
Go to the top of the page
+Quote Post
destroyerr
post
Post #4





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Zacznijmy od tego, że sfValidatorSchemaCompare nie przyjmuje wartości, a nazwy pól formularza. Poza tym chcesz porównywać hasło z bazy z tym wpisanym przez użytkownika? Chcesz powiedzieć, że hasła przechowujesz w czystej postaci? Zmień to jak najszybciej.
Jako postValidator zastosowałbym albo własny walidator, albo callback. Oczywiście nie musi to być postValidator, może być po prostu walidator na polu stare_haslo

Jeśli chcesz pobrać login użytkownika, w formularzu, to wystarczy przecież:
  1. $this->getObject()->getLogin();


Pytanie mam jeszcze dlaczego na nowo ustawiasz wszystkie widżety. Na pewno jest to konieczne?
Jeszcze porada odnośnie pobierania danych w różnych miejscach (czy to w akcji, czy to w formularzu), korzystaj raczej z klas *Peer i to w nich twórz zapytania i zwracaj gotowe dane. Unikaj tworzenie obiektu Criteria poza modelem.
Go to the top of the page
+Quote Post
blackroger
post
Post #5





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 8.11.2008

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


Zapomniałem wcześniej wspomnieć, że właśnie problem leży w kodowaniu hasła. Bo samo porównanie nie jest problemem tak jak napisał Berg, ale właśnie zakodowanie wartości pola i dopiero porównanie go stanowi....czyli jak najlepiej to zrobić? napisać własny validator, w którym będę porównywał wartości tak jakbym to robił w akcji?


Odnośnie widgetów potrzebuje tylko zmian w kilku ale nie mogę przecież w klasie dziedziczącej dać setValidators i ustawić powiedzmy dwóch bo będą tylko dwa walidatory, tym bardziej że do każdego mam walidację...

Ten post edytował blackroger 24.09.2009, 12:55:16
Go to the top of the page
+Quote Post
Berg
post
Post #6





Grupa: Zarejestrowani
Postów: 180
Pomógł: 37
Dołączył: 1.05.2008
Skąd: Białystok

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


Faktycznie, zapomniałem że postValidator nie uznaje przesłanych zmiennych. To może rzucę kodem jak napisać własny walidator:

  1. public function configure() {
  2.  
  3. $this->getValidatorSchema()->setPostValidator(new sfValidatorCallback(array( 'callback' => array($this, 'checkPassword'))));
  4. }
  5.  
  6. public function checkPassword($validator, $values) {
  7.  
  8. $haslo = md5($values['haslo']); // Pobieram nowe hasło i traktuje je md5
  9. $stare_haslo = $this->getObject()->getHaslo(); // Pobieram stare hasło
  10. if($haslo == $stare_haslo) {
  11. $error = new sfValidatorError($validator, 'Błędne hasło');
  12. throw new sfValidatorErrorSchema($validator, array('haslo' => $error));
  13. }
  14. return $values;
  15. }
  16.  


Cytat(blackroger @ 24.09.2009, 13:50:48 ) *
Odnośnie widgetów potrzebuje tylko zmian w kilku ale nie mogę przecież w klasie dziedziczącej dać setValidators i ustawić powiedzmy dwóch bo będą tylko dwa walidatory, tym bardziej że do każdego mam walidację...


Radziłbym zacząć dokładnie czytać dokumentację Symfony, od tego masz chociażby widgetSchema winksmiley.jpg
  1. $this->widgetSchema['haslo'] = new sfWidgetFormInputPassword();



Ten post edytował Berg 24.09.2009, 13:05:46
Go to the top of the page
+Quote Post
blackroger
post
Post #7





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 8.11.2008

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


Dzięki wielkie tylko zamiast:
  1. if($haslo == $stare_haslo)


to
  1. if($haslo <> $stare_haslo)


bo nie zauważyłem i nie chodziło tongue.gif
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: 22.08.2025 - 10:02