2014-07-07 6 views
0

저는 symfony를 처음 사용하며 sfDoctrineGuard Plugin을 사용하여 symfony 1.4 버전의 기존 프로젝트에서 작업하고 있습니다. 백엔드에서 사용자 계정을 업데이트하려고하는데 동시에 새 비밀번호를 설정해야합니다. 비밀번호 필드는 사용자를 업데이트 할 때 필수 필드가 아니어야합니다. 이것은 내가 수행하는 단계입니다사용자 계정을 업데이트하려면 새로운 비밀번호가 필요합니다.

1) "사용자 계정"을 통해 사용자를 편집하십시오 2) 암호 필드가 모두 비어 있는지 확인하여 변경하지 않고 사용자를 저장하십시오. 3) 양식은 다음과 같은 오류가 발생합니다 : "필요한 암호를"여기

는이 문제를 해결할 수있는 방법 편집 양식

class sfGuardUserEditForm extends BasesfGuardUserForm 
{ 

$this->widgetSchema['password'] = new sfWidgetFormInputPassword(); 
$this->validatorSchema['password'] = new sfValidatorPassword(); 
$this->widgetSchema['password_again'] = new sfWidgetFormInputPassword(); 
$this->validatorSchema['password_again'] = new sfValidatorString(array('max_length' => 128, 'required' => true, 'empty_value' => null), array('required' =>'Please provide password again')); 

$this->widgetSchema->moveField('password_again', 'after', 'password'); 

$this->mergePostValidator(new sfValidatorSchemaCompare('password', sfValidatorSchemaCompare::EQUAL, 'password_again', array(), array('invalid' => 'The two passwords must be the same.'))); 

} 

public function save($conn = null) 
{ 
$this->object->setPassword($this->getValue('password')); 
$this->object->save(); 
} 
} 

내 코드는?

+1

주제 : 당신이 새로운 사람이라면 왜 1.x로 작업하고 있습니까? 1.4는 정말로 오래되었습니다. – Samuel

+0

@Samuel 저는 기존 프로젝트에서 일하고 있습니다. – jaahvicky

답변

0

개체가 이미 존재하는지 여부도 확인할 수 있습니다. 존재하는 경우 편집시 암호 필드의 유효성을 검사하지 않으며 존재하지 않으면 암호 필드의 유효성을 검사해야합니다.

if ($this->getObject()->Exists()) 
{ 
$this->validatorSchema['password'] = new sfValidatorPassword(array('required'=>false)); 
} 
else 
{ 
$this->validatorSchema['password'] = new sfValidatorPassword(array('required'=>true)); 
} 
1

비밀번호를 요구하지 않도록 백엔드에서 사용자 편집에 사용되는 양식을 변경해야합니다. 변경 :

$this->validatorSchema['password'] = new sfValidatorPassword(array('required'=>false)); 

$this->validatorSchema['password_again'] = new sfValidatorString(array('max_length' => 128, 'required' => false, 'empty_value' => null), array('required' =>'Please provide password again')); 

이 새 비밀번호를 추가하기위한 요구 사항을 제거합니다.