Php 将用户名设置为sfDoctrineGuardPlugin中的电子邮件地址
在表Php 将用户名设置为sfDoctrineGuardPlugin中的电子邮件地址,php,symfony1,sfguard,Php,Symfony1,Sfguard,在表sf\u guard\u user中,需要电子邮件地址和用户名,但我想将电子邮件用作用户名 因此,我想从表单中删除其中一个字段,但由于需要,我总是会收到错误,我试图设置用户名=电子邮件地址,反之亦然,我尝试了操作、表单和模型,但没有成功 我认为在sfGuardUser模型中编写一个名为getUsername()的函数并返回电子邮件就足够了,但是没有 这可能吗?? 我该怎么做 谢谢,因为这是可能的。您甚至不必处理模式。只需将电子邮件存储在用户名和电子邮件地址中即可 class sfGuardU
sf\u guard\u user
中,需要电子邮件地址
和用户名
,但我想将电子邮件用作用户名
因此,我想从表单中删除其中一个字段,但由于需要,我总是会收到错误,我试图设置用户名
=电子邮件地址
,反之亦然,我尝试了操作、表单和模型,但没有成功
我认为在sfGuardUser
模型中编写一个名为getUsername()
的函数并返回电子邮件就足够了,但是没有
这可能吗??
我该怎么做
谢谢,因为这是可能的。您甚至不必处理模式。只需将电子邮件存储在用户名和电子邮件地址中即可
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);
}
}
重写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);
}
}