tworze rejestracje uzytkownikow i zachcialo mi sie walidacji loginu, czyli login musi byc unikalny.Oczywiscie walidacja po stronie serwera.
Oto baza:
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(250) NOT NULL,
`surname` varchar(250) DEFAULT NULL,
`login` varchar(250) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `login` (`login`),
KEY `user_FI_1` (`role`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
to klasa formy:
-utworzylem sobie taka funkcyjke
protected function getLoginValidator()
{
return new sfValidatorAnd
(array(new sfValidatorString
(array('min_length' => 3, 'required' => true),
array('min_length' => 'Login musi być dłuższy niż 3 znaki', 'required' => 'Podanie loginu jest wymagane')),
new sfValidatorPropelUnique
(array('model' => 'User', 'column' => array('login')), array('invalid'=>'Podany login już zajety. Prosimy wybrać inny.')) ));
}
a na koncu
$this->validatorSchema->setPostValidator($this->getLoginValidator($this->getValues()));
w kontrolerze mam natomiast:
$this->form = new UserForm();
$this->firmForm = new FirmForm();
if($request->isMethod('post'))
{
$this->form->bind($request->getParameter($this->form->getName()));
w requescie jest przeslana tablica, ale problem pojawia sie z tym loginem (IMG:
style_emoticons/default/dry.gif)
Cytat
You must pass an array parameter to the clean() method (this validator can only be used as a post validator).
siedze nad tym od 14 i juz nie mam sil zeby to rozwiazac samemu.Prosze o pomoc.
//edit
a jednak doszedlem sam.
oprocz mojej funkcji powinien byc rowniez zwykly walidator stringowy:
$this->setValidators(array(
'login' => new sfValidatorString
(array('required' => true, 'min_length' => 3,
'max_length' => 25),
array('min_length' => 'Numer telefonu komórkowego powinien składać się z min. 3. znaków', 'max_length' => 'Numer telefonu komórkowego nie może składać się więcej niż z 25. znaków')),
wtedy funkcja walidujaca:
protected function getLoginValidator()
{
return new sfValidatorPropelUnique
(array('model' => 'User', 'column' => 'login'),
array('invalid'=>'Podany login już zajety. Prosimy wybrać inny.')); }
smiga az milo (IMG:
style_emoticons/default/laugh.gif)