2011-04-07 28 views
1

EMAIL_ADDRESS在表sf_guard_user中,email_addressusername需要选用有,但我想使用的电子邮件为username设置好用户名等于sfDoctrineGuardPlugin

所以,我想从表单中删除这一领域的一个,但因为它是必需的,我总是得到错误,我试图设置username = email_address或反之亦然,我已经尝试过的动作,形式和模型,但没有成功....

认为在名称为getUsername()sfGuardUser型号中编写函数并返回电子邮件为够了,但没有........

这是可能的? 我该怎么做?

谢谢

回答

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

这是什么线$这个 - > updateObject(); ?? – 2011-04-08 12:35:02

+0

用当前值更新表单对象。否则,您最终可能会看到引用过期数据的表单。 – 2011-04-08 12:46:36

0

覆盖Object :: save()函数中的username字段是更好的方法 - 因此它可以处理所有表单。

在您的表单中,您重写了用户名小部件的验证器。如果需要,您还可以隐藏小部件。

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); 
    } 
} 
相关问题