#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));
}