Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] Problem z sfValidatorPropelUnique
blackroger
post 19.09.2009, 12:40:49
Post #1





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

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


Witam. Mam problem dotyczący sfValidatorPropelUnique. Wszystko działa jak należy przy rejestracji tylko chcę go wykorzystać do zmiany danych użytkownika. Problem pojawia w momencie próby zmiany powiedzmy loginu który jest unikalny.
  1. $this->validatorSchema->setPostValidator(new sfValidatorAnd(array(
  2. new sfValidatorPropelUnique(
  3. array('model'=>'Uzytkownicy',
  4. 'column'=>'login'),
  5. array('invalid'=>'Podany login już istnieje'))
  6. ..........
  7. ....
  8. ...
  9. )));


Jak zrobić żeby ten walidator szukał unikalności tylko i wyłącznie dla wszystkich loginów różnych od loginu który jest aktualnie używany przez tego użytkownika. Powiedzmy że login jest Jasiu i użytkownik pozostawia przy zmianie login taki sam, to postwalidator poinformuje ze taki w bazie istnieje, a nie powinien. Natomiast jak użytkownik zmieni login z Jasiu na Janek, a taki login bedzie już przydzielony do innego id to ma poinformowac o zajętości. Wiem że można to zrobić poprzez bezpośrednie zapytania sqlowe i redukcją danego loginu ale chciałbym to zrobić za pomocą sfValidatorPropelUnique. CZy jest taka możliwość? A jeżeli nie ma to proszę o jak najlepsze rozwiązanie.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
blackroger
post 20.09.2009, 01:37:18
Post #2





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

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


  1. class ChangeDataForm extends sfForm {
  2.  
  3. public function configure() {
  4. $this->setWidgets(array('login'=>new sfWidgetFormInput(),
  5. 'stare_haslo'=>new sfWidgetFormInputPassword(),
  6. 'nowe_haslo'=>new sfWidgetFormInputPassword(),
  7. 'nowe_powtorz'=>new sfWidgetFormInputPassword(),
  8. 'imie'=>new sfWidgetFormInput(),
  9. 'nazwisko'=>new sfWidgetFormInput(),
  10. 'miasto'=>new sfWidgetFormInput(),
  11. 'mail'=>new sfWidgetFormInput(),
  12. ));
  13.  
  14. $this->widgetSchema->setLabels(array('login'=>'Login:',
  15. 'stare_haslo'=>'Stare hasło:',
  16. 'nowe_haslo'=>'Nowe hasło:',
  17. 'nowe_powtorz'=>'Powtórz nowe hasło:',
  18. 'imie'=>'Imię:',
  19. 'nazwisko'=>'Nazwisko:',
  20. 'miasto'=>'Miasto:',
  21. 'mail'=>'E-mail:'
  22. ));
  23.  
  24. $this->setValidators(array('login'=>new sfValidatorString(
  25. array('required'=>true,
  26. 'min_length'=>3),
  27. array('min_length'=>'Login powinien składać się z
  28. minimum 3 znaków',
  29. 'required'=>'To pole jest wymagane')),
  30.  
  31. 'stare_haslo'=>new sfValidatorString(
  32. array('required'=>true,
  33. 'min_length'=>6),
  34. array('min_length'=>'Hasło powinno składać się z
  35. minimum 6 znaków',
  36. 'required'=>'To pole jest wymagane')),
  37.  
  38. 'nowe_haslo'=>new sfValidatorString(
  39. array('required'=>true,
  40. 'min_length'=>6),
  41. array('min_length'=>'Hasło powinno składać się z
  42. minimum 6 znaków',
  43. 'required'=>'To pole jest wymagane')),
  44.  
  45.  
  46. 'nowe_powtorz'=>new sfValidatorString(
  47. array('required'=>true,
  48. 'min_length'=>6),
  49. array('min_length'=>'Hasło powinno składać się z
  50. minimum 6 znaków',
  51. 'required'=>'To pole jest wymagane')),
  52.  
  53. 'imie'=>new sfValidatorString(
  54. array('required'=>true,
  55. 'min_length'=>2),
  56. array('required'=>'To pole jest wymagane',
  57. 'min_length'=>'Imię powinno składać się z
  58. minimum 2 znaków')),
  59.  
  60. 'nazwisko'=>new sfValidatorString(
  61. array('required'=>true,
  62. 'min_length'=>2),
  63. array('required'=>'To pole jest wymagane',
  64. 'min_length'=>'Nazwisko powinno składać się z
  65. minimum 2 znaków')),
  66.  
  67. 'miasto'=>new sfValidatorString(
  68. array('required'=>false),
  69. array('required'=>'To pole jest wymagane')),
  70.  
  71. 'mail'=>new sfValidatorEmail(
  72. array(),
  73. array('invalid'=>'Zły adres email',
  74. 'required'=>'To pole jest wymagane'))
  75.  
  76.  
  77. ));
  78. //po metodzie POST
  79. $this->validatorSchema->setPostValidator(new sfValidatorAnd(array(
  80. new sfValidatorPropelUnique(
  81. array('model'=>'Uzytkownicy',
  82. 'column'=>'login'),
  83. array('invalid'=>'Podany login już istnieje')),


  1. new sfValidatorPropelUnique(
  2. array('model'=>'Rejestracja',
  3. 'column'=>'login'),
  4. array('invalid'=>'Podany login już istnieje')),
  5.  
  6. new sfValidatorSchemaCompare(
  7. 'nowe_haslo', sfValidatorSchemaCompare::EQUAL, 'nowe_powtorz',
  8. array(),
  9. array('invalid'=>'Hasła nie pasują do siebie!'))
  10.  
  11. )));//walidator unikalnego loginu i compare haseł
  12.  
  13.  
  14. }//koniec configure
  15. }//koniec klasy ChangeDataForm
  16.  
  17. //----------------akcja
  18.  
  19. public function executeEdit(sfWebRequest $request)
  20. {
  21. if($this->getUser()->isAuthenticated())
  22. {
  23. $id = $this->getUser()->getAttribute('id', null, 'uzytkownik');//pobieranie id usera
  24.  
  25. $c = new Criteria();
  26. $c->add(UzytkownicyPeer::USID, $id);
  27. $u = UzytkownicyPeer::doSelectOne($c);
  28.  
  29. if($this->getRequest()->isMethod('post'))//jezeli wyslano
  30. {
  31. $this->form = new ChangeDataForm();
  32. $this->form->bind(array('login'=>$this->getRequest()->getParameter('login'),
  33. 'stare_haslo'=>$this->getRequest()->getParameter('stare_haslo'),
  34. 'nowe_haslo'=>$this->getRequest()->getParameter('nowe_haslo'),
  35. 'nowe_powtorz'=>$this->getRequest()->getParameter('nowe_powtorz'),
  36. 'imie'=>$this->getRequest()->getParameter('imie'),
  37. 'nazwisko'=>$this->getRequest()->getParameter('nazwisko'),
  38. 'miasto'=>$this->getRequest()->getParameter('miasto'),
  39. 'mail'=>$this->getRequest()->getParameter('mail')
  40. ));
  41.  
  42.  


  1. if($this->form->isValid())//jezeli poprawny formularz
  2. {
  3.  
  4. if(md5($this->getRequest()->getParameter('stare_haslo') == $u->getHaslo()))//jezeli stare haslo sie zgadza
  5. {
  6. echo 'Haslo sie zgadza';...
  7. .................
  8. .......
  9. ...........//zapis do bazy itd.......................................
  10. }
  11.  
  12.  
  13. }//koniec valid if
  14. } else//ustawianie danych startowych
  15. {
  16. $this->form = new ChangeDataForm(array('login'=>$u->getLogin(),
  17. 'imie'=>$u->getImie(),
  18. 'nazwisko'=>$u->getNazwisko(),
  19. 'miasto'=>$u->getMiasto(),
  20. 'mail'=>$u->getMail()
  21. ));
  22.  
  23.  
  24. }//koniec request if
  25. }
  26. }//koniec executeEdit
  27.  
  28.  
  29.  


Chyba zaczynam powoli rozumieć mój problem....bo ja tworze nowy formularz i uzupełniam go danymi z jakiegoś tam wpisu i w momencie zapisu to jest traktowane jako nowy user a nie ten sam....potestuje to co Pr0100 napisał i zobaczę czy dam rade zrobić to co chcę. Rzeczywiście symfony musi traktować formularz jako formularz z danymi do edycji a nie formularz z danymi innego użytkownika, który potem przy zapisie próbuje stworzyć nowego usera. Jestem początkujący w symfony i poprostu wiele rzeczy rzutuje mi się jeszcze z obiektowego, zwykłego php, gdzie tworzyłem obiekty, zapisywałem dane do zmiennych a potem wykonywałem zapytania z udziałem tych zmiennych. Proszę o najjaśniejsze wyjaśnienie.

Ten post edytował blackroger 20.09.2009, 01:40:43
Go to the top of the page
+Quote Post

Posty w temacie


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 Wersja Lo-Fi Aktualny czas: 24.06.2025 - 15:55