1

sf_guard_userでは、email_addressusernameが必要ですが、電子メールを次のように使用したいusername

したがって、フォームからこのフィールドの 1 つを削除することを考えていますが、必須であるため、常にエラーが発生し、username=を設定しようとしています。email_addressまたはその逆も同様です。アクション、フォームで試しました、およびモデルですが、成功しません....

sfGuardUser名前でモデルに関数を書いgetUsername()てメールを返すだけで十分だと思ったのですが、違います........

これは可能ですか?? どうすればできますか??

ありがとう

4

2 に答える 2

2

当然可能です。スキーマをいじる必要さえありません。username と 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);
  }
}
于 2011-04-07T21:08:04.680 に答える
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);
  }
}
于 2011-08-02T04:25:37.700 に答える