У меня есть форма для редактирования UserProfile, которая хранится в MySQL DB. Который включает в себя следующую пользовательскую конфигурацию:
public function configure()
{
$this->widgetSchema['password']=new sfWidgetFormInputPassword();
$this->validatorSchema['password']->setOption('required', false); // you don't need to specify a new password if you are editing a user.
}
Когда пользователь пытается сохранить, вызывается метод executeUpdate, чтобы зафиксировать изменения.
Если пароль оставлен пустым, поле пароля установлено на '', но я хочу, чтобы оно сохранило старый пароль вместо его перезаписи.
Каков наилучший (/ наиболее в духе Symfony) способ сделать это? Мое решение состояло в том, чтобы переопределить метод установки на модели (который я все равно сделал для шифрования пароля) и игнорировать пустые значения.
public function setPassword( $password )
{
if ($password=='') return false; // if password is blank don't save it.
return $this->_set('password', UserProfile ::encryptPassword( $password ));
}
Кажется, что это нормально работает, но есть ли лучший способ?
Если вам интересно, я не могу использовать sfDoctrineGuard для этого проекта, так как имею дело с устаревшей базой данных и не могу изменить схему.