У меня есть Profile
форму, которая наследуется от sfGuardRegisterForm
Symfony 1,4 условной проверки
У меня есть эти поля:
$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());
//...
Если пользователь DonT изменить адрес электронной почты, он всегда будет показывать это сообщение:
A n с тем же «email_address» уже существует.
Я просто хочу, чтобы пропустить
$this->getObject()->checkPassword()
Кроме того, это не работает, всегда показывать это сообщение:
Неправильный текущий пароль.
Я использую:
$ это -> _ пользователь = sfContext :: деЫпзЬапсе() -> GetUser() -> getGuardUser();
Чтобы получить фактический профиль пользовательскому
EDIT2
Еще раз спасибо 1ed
Это очень странно, и я получаю frustated, это ситуация
- У меня есть «обходной путь» для thi s, но это не соответствует стандарту, я могу сделать это работает, но с помощью
sfContext::getInstance()->getUser()->getGuardUser();
и это будет более unnecesary код - Если я использую
new ProfileForm($user)
автоматически заполняет все поля, это очень хорошо но я не могуsetDefault()
я могу «т установитьnull
илиempty
любое поле, так что я не могу использоватьdoUpdateObject()
, потому что эта функция работает только тогда, когда текущие данные обновляются, и я испытал перекрываяbind()
,save()
и т.д. без результатов
Спасибо, что у меня есть обновил вопрос – tttony
Я думаю, что валидаторы не работают, потому что вы не устанавливаете базовый пользовательский объект. И этот '$ this -> _ user = sfContext :: getInstance() -> getUser() -> getGuardUser();' не очень хорошая идея, всегда старайтесь избегать использования sfContext, если это возможно. В действии, где вы создаете форму, вы должны получить объект пользователя и передать его в форму, и все значения будут заполнены на основе пользователя. '$ user = $ this-> getUser() -> getGuardUser(); $ this-> form = new ProfileForm ($ user); '. Вызов 'setDefault()' не требуется. – 1ed
Одна вещь mote ... валидатор 'sfValidatorSchemaCompare' не требуется, поскольку он уже находится в' BasesfGuardUserAdminForm', поэтому я удалил это. – 1ed