У меня есть форма Profile
, которая наследуется от sfGuardRegisterForm
У меня есть эти поля:
$this->useFields(
array('first_name',
'last_name',
'email_address',
'country',
'language',
'current_password',
'new_password',
'password_again',
)
);
Обязательные поля:
email_address
, country
и language
И условия:
- Если
email_address
не равно текущему email_address
затем проверьте, является ли он уникальным , затем сохраните его
- Если
current_password
является действительным паролем пользователя, убедитесь, что new_password
и password_again
равны, и убедитесь, что new_password
не равно действительному паролю пользователя
Я просто не могу понять, как реализовать это
EDIT
Спасибо 1ed ваш пример работает, но проблема в том, что я загружаю профиль пользователя и заполняю поля: 'first_name', 'last_name', 'email_address', 'country', 'language'
фактическим зарегистрированным пользователем, поэтому в поле email_address
будет показан адрес электронной почты:
//...
$this->widgetSchema['email_address']->setDefault($this->_user->getEmailAddress());
//...
Если пользователь не меняет адрес электронной почты, он всегда будет показывать это сообщение:
Объект с таким же "email_адресом" уже существует.
Я просто хочу пропустить это
Также это $this->getObject()->checkPassword()
не работает, всегда показывать это сообщение:
Неверный текущий пароль.
Я использую:
$ this -> _ user = sfContext :: getInstance () -> getUser () -> getGuardUser ();
Чтобы получить актуальный профиль пользователя
EDIT2
Еще раз спасибо 1ed
Это очень странно, и я становлюсь раздраженным, это ситуация
- У меня есть «обходной путь» для этого, но он не соответствует стандарту, я могу заставить его работать, но используя
sfContext::getInstance()->getUser()->getGuardUser();
, и это будет более ненужный код
- Если я использую
new ProfileForm($user)
, автоматически заполняет все поля, это очень хорошо , но Я не могу setDefault()
Я не могу установить null
или empty
любое поле, чтобы я мог ' t использовать doUpdateObject()
, поскольку эта функция работает только при обновлении текущих данных, также я протестировал переопределение bind()
, save()
и т. д. без результатов