![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 7 Dołączył: 6.09.2011 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam dwie tabele w bazie. Pierwsza sf_guard_user, druga uzytkownik. W tabeli uzytkownik znajduje się klucz obcy do tabeli sf_guard_user wygenerowanej przez plugin sfGuardAuth. Stworzyłem formularz i teraz chciałbym go zabezpieczyć. Oto kod:
Kod <?php class RegisterForm extends sfGuardUserForm { public function configure() { // Remove all widgets we don't want to show unset( $this['is_active'], $this['is_super_admin'], $this['updated_at'], $this['sf_guard_user_group_list'], $this['sf_guard_user_permission_list'], $this['last_login'], $this['created_at'], $this['salt'], $this['algorithm'] ); $uzytkownikForm = new UzytkownikForm($this->getObject()->getUzytkownik()); unset ($uzytkownikForm['uzytkownik_id']); $this->embedForm('Uzytkownik',$uzytkownikForm); //$this->widgetSchema->setNameFormat('Uzytkownik[%s]'); $this->widgetSchema['password'] = new sfWidgetFormInputText(); $this->widgetSchema['Uzytkownik']['haslo'] = new sfWidgetFormInputText(); $this->validatorSchema['username'] = new sfValidatorString(array('max_length' => 128, 'required' => true), array('max_length' => 'Maximum 128 znaków', 'required' => 'Pole jest wymagane')); $this->validatorSchema['password'] = new sfValidatorString(array('max_length' => 45, 'required' => true), array('max_length' => 'Maximum 45 znaków', 'required' => 'Pole jest wymagane')); $this->validatorSchema['Uzytkownik']['imie'] = new sfValidatorString(array('max_length' => 45, 'required' => true), array('max_length' => 'Maximum 45 znaków', 'required' => 'Pole jest wymagane')); $this->validatorSchema['Uzytkownik']['nazwisko'] = new sfValidatorString(array('max_length' => 128, 'required' => true), array('max_length' => 'Maximum 45 znaków', 'required' => 'Pole jest wymagane')); $this->validatorSchema['Uzytkownik']['email'] = new sfValidatorEmail(array('max_length' => 45, 'required' => true), array('max_length' => 'Maximum 45 znaków', 'required' => 'Pole jest wymagane', 'invalid' => 'Złe dane')); $this->validatorSchema['Uzytkownik']['haslo'] = new sfValidatorString(array('max_length' => 45, 'min_length' => 6, 'required' => true), array('min_length' => 'Minimum 6 znaków', 'max_length' => 'Maximum 45 znaków', 'required' => 'Pole jest wymagane')); } } ?> Chciałbym aby pole [password] i [Uzytkownik][haslo] były sprawdzane pod względem identyczności, tzn pole [password] ma być takie samo jak pole [Uzytkownik][haslo]. Problem polega na tym, że do pól dodatkowych, które nie są w tabeli sf_guard_user mam dostęp w taki sposób: [Uzytkownik][haslo] i nie wiem jak mam przekazać to pole dalej. Próbowałem wstawić taki kod i zmieniałem zawartość oznaczoną znakami zapytania na różne sposoby ale dalej nic: Kod $this->widgetSchema->moveField('?(IMG:style_emoticons/default/questionmark.gif) ', 'after', 'password'); $this->validatorSchema['haslo'] = clone $this->validatorSchema['Uzytkownik']['haslo']; $this->mergePostValidator(new sfValidatorSchemaCompare('?(IMG:style_emoticons/default/questionmark.gif) ', sfValidatorSchemaCompare::EQUAL, 'haslo', array(), array('invalid' => 'Oba hasła muszą być takie same.'))); Czy ktoś może mi powiedzieć co mam wpisać w miejsce znaków zapytania, żeby formularz zatrybił, bo już chyba na wszelkie sposoby próbowałem...(IMG:style_emoticons/default/biggrin.gif) Kolejny problem to walidacja emaila pod względem unikatowości. Gdy wpiszę: Kod $this->validatorSchema->setPostValidator( new sfValidatorPropelUnique(array('model' => 'Uzytkownik', 'column' => array('email')), array('invalid' => 'Taki email już istnieje')) ); to pole [Uzytkownik][email] nie jest sprawdzane, gdyż po zduplikowaniu maila, który jest w bazie, nie wyświetla się komunikat o tym, że dany mail już jest zajęty. Gdy natomiast zmienię to na tabelę sf_guard_user oraz kolumnę username wszystko jest w porządku-tą tabelę w taki sposób widzi. Czy mógłby mi ktoś pomóc, bo tracę siły do tej walidacji...?(IMG:style_emoticons/default/smile.gif) Jeden problem został rozwiązany. Czy ktoś wie może dlaczego nie chce mi sprawdzać maila pod względem unikatowości w bazie? Bardzo proszę o pomoc... |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 7 Dołączył: 10.03.2011 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy dobrze zrozumiałem ale starasz się sprawdzać wszystkie pola w formularzu RegisterForm. Hasło przechowujesz w tabeli sf_guard_user wiec walidator powinien znalezc się w sfGuardUserForm. Email przechowujesz w tabeli Uzytkownik wiec walidator powinien znalezc się w UzytkownikForm. Dzieki temu, raz że mógłbyś odwoływać się do nich w prostszy sposób, dwa że pewnie nie miałbyś takich problemów. Przenieś ten walidator do UzytkownikForm:)
Ten post edytował jaro87 7.09.2011, 12:48:29 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 7 Dołączył: 6.09.2011 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Wszystko już zostało rozwiązane:) Jeżeli chodzi o walidację haseł, to źle się za to zabierałem... Jeżeli chodzi o email, to w pliku schema.yml, w którym miałem całą strukturę tabeli Uzytkownik nie wpisałem index: unique... Stąd problem z wrakiem walidacji emaila. Ale dzięki za odpowiedź i podpowiedź(IMG:style_emoticons/default/smile.gif) Jutro zrobię z tym porządek:) pozdro
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 18:14 |