установить имя пользователя равным email_address в sfDoctrineGuardPlugin - PullRequest
1 голос
/ 07 апреля 2011

в таблице sf_guard_user, email_address и username требуются, но я хочу использовать электронную почту как username

Итак, я думаю удалить одно из этих полей из формы, но, как это требуется, я всегда получаю сообщение об ошибке, и я пытаюсь установить username = email_address или наоборот, Я пробовал в действии, форме и модели, но безуспешно ...

подумал, что написания функции в модели sfGuardUser с именем getUsername() и возврате электронного письма было достаточно, но нет ........

это возможно ?? как я могу это сделать ??

спасибо

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Конечно, это возможно. Вам даже не нужно связываться со схемой. Просто храните электронную почту как в имени пользователя, так и в адресе электронной почты.

class sfGuardUserForm extends PluginsfGuardUserForm
{
  public function doSave($con = null)
  {
    //update object with form values
    $this->updateObject();
    $this->getObject()->setUsername($this->getObject()->getEmailAddress());

    return parent::doSave($con);
  }
}
0 голосов
/ 02 августа 2011

Переопределение поля имени пользователя в функции Object :: save () является гораздо лучшим способом - так что оно обрабатывает все формы.

В ваших формах вы переопределяете валидатор для виджета имени пользователя. Вы также можете скрыть виджет, если хотите.

class sfGuardUserAdminForm extends BasesfGuardUserAdminForm
{

  public function setup()
  {
    parent::setup();
    $this->setWidget('username', new sfWidgetFormInputHidden());
    $this->setValidator('username', new sfValidatorPass());
  }

}

и

class sfGuardUser extends PluginsfGuardUser
{
  public function save(Doctrine_Connection $conn = null){
    $this->setUsername($this->getEmailAddress());
    parent::save($conn);
  }
}
...