在sfDoctrineGuardPlugin中将username设置为等于email_address

时间:2011-04-07 18:09:04

标签: php symfony1 sfguard

sf_guard_user中的

email_addressusername是必需的,但我想将该电子邮件用作username

所以,我想从表单中删除其中一个字段,但是因为它是必需的,我总是会收到错误,而我正在设置username = email_address反之亦然,我已尝试过动作,形式和模型,但没有成功......

认为在sfGuardUser模型中编写一个名为getUsername()的函数并返回电子邮件就足够了,但没有........

这可能吗? 我该怎么办?

感谢

2 个答案:

答案 0 :(得分:2)

原因有可能。你甚至不必乱用架构。只需在用户名和email_address中存储电子邮件。

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

答案 1 :(得分:0)

覆盖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);
  }
}