class ChangeDataForm extends sfForm {
public function configure() {
$this->setWidgets(array('login'=>new sfWidgetFormInput
(), 'stare_haslo'=>new sfWidgetFormInputPassword(),
'nowe_haslo'=>new sfWidgetFormInputPassword(),
'nowe_powtorz'=>new sfWidgetFormInputPassword(),
'imie'=>new sfWidgetFormInput(),
'nazwisko'=>new sfWidgetFormInput(),
'miasto'=>new sfWidgetFormInput(),
'mail'=>new sfWidgetFormInput(),
));
$this->widgetSchema->setLabels(array('login'=>'Login:', 'stare_haslo'=>'Stare hasło:',
'nowe_haslo'=>'Nowe hasło:',
'nowe_powtorz'=>'Powtórz nowe hasło:',
'imie'=>'Imię:',
'nazwisko'=>'Nazwisko:',
'miasto'=>'Miasto:',
'mail'=>'E-mail:'
));
$this->setValidators(array('login'=>new sfValidatorString
( 'min_length'=>3),
array('min_length'=>'Login powinien składać się z minimum 3 znaków',
'required'=>'To pole jest wymagane')),
'stare_haslo'=>new sfValidatorString(
'min_length'=>6),
array('min_length'=>'Hasło powinno składać się z minimum 6 znaków',
'required'=>'To pole jest wymagane')),
'nowe_haslo'=>new sfValidatorString(
'min_length'=>6),
array('min_length'=>'Hasło powinno składać się z minimum 6 znaków',
'required'=>'To pole jest wymagane')),
'nowe_powtorz'=>new sfValidatorString(
'min_length'=>6),
array('min_length'=>'Hasło powinno składać się z minimum 6 znaków',
'required'=>'To pole jest wymagane')),
'imie'=>new sfValidatorString(
'min_length'=>2),
array('required'=>'To pole jest wymagane', 'min_length'=>'Imię powinno składać się z
minimum 2 znaków')),
'nazwisko'=>new sfValidatorString(
'min_length'=>2),
array('required'=>'To pole jest wymagane', 'min_length'=>'Nazwisko powinno składać się z
minimum 2 znaków')),
'miasto'=>new sfValidatorString(
array('required'=>false
), array('required'=>'To pole jest wymagane')),
'mail'=>new sfValidatorEmail(
array('invalid'=>'Zły adres email', 'required'=>'To pole jest wymagane'))
));
//po metodzie POST
$this->validatorSchema->setPostValidator(new sfValidatorAnd
(array( new sfValidatorPropelUnique(
array('model'=>'Uzytkownicy', 'column'=>'login'),
array('invalid'=>'Podany login już istnieje')),
new sfValidatorPropelUnique(
array('model'=>'Rejestracja', 'column'=>'login'),
array('invalid'=>'Podany login już istnieje')),
new sfValidatorSchemaCompare(
'nowe_haslo', sfValidatorSchemaCompare::EQUAL, 'nowe_powtorz',
array('invalid'=>'Hasła nie pasują do siebie!'))
)));//walidator unikalnego loginu i compare haseł
}//koniec configure
}//koniec klasy ChangeDataForm
//----------------akcja
public function executeEdit(sfWebRequest $request)
{
if($this->getUser()->isAuthenticated())
{
$id = $this->getUser()->getAttribute('id', null, 'uzytkownik');//pobieranie id usera
$c = new Criteria();
$c->add(UzytkownicyPeer::USID, $id);
$u = UzytkownicyPeer::doSelectOne($c);
if($this->getRequest()->isMethod('post'))//jezeli wyslano
{
$this->form = new ChangeDataForm();
$this->form->bind(array('login'=>$this->getRequest()->getParameter('login'), 'stare_haslo'=>$this->getRequest()->getParameter('stare_haslo'),
'nowe_haslo'=>$this->getRequest()->getParameter('nowe_haslo'),
'nowe_powtorz'=>$this->getRequest()->getParameter('nowe_powtorz'),
'imie'=>$this->getRequest()->getParameter('imie'),
'nazwisko'=>$this->getRequest()->getParameter('nazwisko'),
'miasto'=>$this->getRequest()->getParameter('miasto'),
'mail'=>$this->getRequest()->getParameter('mail')
));
if($this->form->isValid())//jezeli poprawny formularz
{
if(md5($this->getRequest()->getParameter('stare_haslo') == $u->getHaslo()))//jezeli stare haslo sie zgadza {
echo 'Haslo sie zgadza';... .................
.......
...........//zapis do bazy itd.......................................
}
}//koniec valid if
} else//ustawianie danych startowych
{
$this->form = new ChangeDataForm
(array('login'=>$u->getLogin(), 'imie'=>$u->getImie(),
'nazwisko'=>$u->getNazwisko(),
'miasto'=>$u->getMiasto(),
'mail'=>$u->getMail()
));
}//koniec request if
}
}//koniec executeEdit
Chyba zaczynam powoli rozumieć mój problem....bo ja tworze nowy formularz i uzupełniam go danymi z jakiegoś tam wpisu i w momencie zapisu to jest traktowane jako nowy user a nie ten sam....potestuje to co
Pr0100 napisał i zobaczę czy dam rade zrobić to co chcę. Rzeczywiście symfony musi traktować formularz jako formularz z danymi do edycji a nie formularz z danymi innego użytkownika, który potem przy zapisie próbuje stworzyć nowego usera. Jestem początkujący w symfony i poprostu wiele rzeczy rzutuje mi się jeszcze z obiektowego, zwykłego php, gdzie tworzyłem obiekty, zapisywałem dane do zmiennych a potem wykonywałem zapytania z udziałem tych zmiennych. Proszę o najjaśniejsze wyjaśnienie.