Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][Symfony 1.4] problem z walidacją maila i haseł.
Valantir
post
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...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
jaro87
post
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
Go to the top of the page
+Quote Post
Valantir
post
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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 14:22