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'));
}
}
?>
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('?
', 'after', 'password');
$this->validatorSchema['haslo'] = clone $this->validatorSchema['Uzytkownik']['haslo'];
$this->mergePostValidator(new sfValidatorSchemaCompare('?
', sfValidatorSchemaCompare::EQUAL, 'haslo', array(), array('invalid' => 'Oba hasła muszą być takie same.')));

$this->validatorSchema['haslo'] = clone $this->validatorSchema['Uzytkownik']['haslo'];
$this->mergePostValidator(new sfValidatorSchemaCompare('?

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...

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'))
);
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...?

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...