【问题标题】:set username equal to email_address in sfDoctrineGuardPlugin在 sfDoctrineGuardPlugin 中设置用户名等于 email_address
【发布时间】:2011-04-07 18:09:04
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: php symfony1 sfguard


    【解决方案1】:

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

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

    【讨论】:

    • 用当前值更新表单对象。否则,您最终可能会得到一个引用过时数据的表单。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 2016-02-08
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      相关资源
      最近更新 更多