1

在表格中sf_guard_user,需要email_addressusername,但我想将电子邮件用作username

所以,我正在考虑从表单中删除此字段之一,但由于它是必需的,我总是得到错误,我正在尝试设置username=email_address或反之亦然,我已经尝试过在操作中,表单,和模型,但没有成功....

以为在sfGuardUser模型中用名字写一个函数getUsername()并返回邮件就够了,但是没有......

这可能吗??我该怎么做??

谢谢

4

2 回答 2

2

因为这是可能的。您甚至不必弄乱架构。只需将电子邮件存储在用户名和电子邮件地址中。

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);
  }
}
于 2011-04-07T21:08:04.680 回答
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);
  }
}
于 2011-08-02T04:25:37.700 回答