Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony 1.4] problem z walidacją maila i haseł.
Forum PHP.pl > Forum > PHP > Frameworki
Valantir
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('?questionmark.gif', 'after', 'password');
$this->validatorSchema['haslo'] = clone $this->validatorSchema['Uzytkownik']['haslo'];
$this->mergePostValidator(new sfValidatorSchemaCompare('?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...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...?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...
jaro87
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:)
Valantir
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źsmile.gif Jutro zrobię z tym porządek:) pozdro
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.