Symfony 1.4 - Bir executeUpdate eylem boş bir parola tasarruf etmeyin

1 Cevap php

Ben mysql db depolanan bir UserProfile düzenlemek için bir form var. Hangi aşağıdaki özel konfigürasyon içerir:

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.
  }

When the user tries to save the executeUpdate method is called to commit the changes. If the password is left blank, the password field is set to '', but I want it to retain the old password instead of overwriting it.

Bu ne yapıyor (/ symfony ethos en) yolu iyi? Benim çözüm (i şifre şifreleme için zaten yapmıştı) modeline pasör yöntemini geçersiz ve boş değerleri yok saymak oldu.

public function setPassword( $password )
{
  if ($password=='') return false; // if password is blank don't save it.
  return $this->_set('password', UserProfile ::encryptPassword( $password ));
}

Bu gibi ince iş gibi görünüyor, ama daha iyi bir yolu var mı?

Eğer merak ediyorsanız ben eski bir veritabanı ile uğraşıyorum olarak bu proje için sfDoctrineGuard kullanamazsınız, ve şema değiştiremezsiniz.

1 Cevap

Bu bana gayet iyi görünüyor:

public function setPassword($password)
{
  if (!$password) return false;
  return $this->_set('password', UserProfile::encryptPassword($password));
}

Ben farklı modelleri ile ilgili diğer form alanları ile birlikte sfGuardUser şifrenizi güncellemeniz gerekir, ben böyle bir şey ile sona erdi ettik birkaç form var:

$id = // sfGuardUser primary key
$values['password'] = // the form post value returned

if ($values['password']) {
  $user = Doctrine::getTable('sfGuardUser')->find($id);
  $user->setPassword($values['password']);
  $user->save();
}

... Bir değer şeklinde yayınlanmıştır eğer bir değer kazandırır.