Для обновления учетной записи пользователя требуется новый пароль

#php #symfony-1.4 #sfguard

#php #symfony-1.4 #sfguard

Вопрос:

Я новичок в symfony и работаю над существующим проектом в версии symfony 1.4 с использованием плагина sfDoctrineGuard . Я пытаюсь обновить учетную запись пользователя в серверной части, и одновременно требуется установить новый пароль. Поле пароля не должно быть обязательным полем при обновлении пользователя. Это шаги, которые я предпринимаю

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 действительно старый.

2. @Samuel я работаю над существующим проектом.

Ответ №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' ));
  

Это устраняет необходимость добавления нового пароля.

Ответ №2:

Вы также можете проверить, существует ли объект уже или нет 1st. Если он существует, он не проверяет поле пароля при редактировании, а если он не существует, он должен подтвердить поле пароля.

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