应该使用哪个验证器来实现Symfony中的登录?

时间:2009-11-18 14:23:18

标签: php symfony1 validation

目前,我的登录表单如下所示,

class LoginForm extends BaseFormPropel
{
  public function setup()
  {
    $this->setWidgets(array(
      'login_id' => new sfWidgetFormInput(), 
      'pwd' => new sfWidgetFormInputPassword() 
    ));

    $this->widgetSchema->setLabels(array(
        'login_id'=>'Login Id',
        'pwd'=>'Password'
    ));

    $this->widgetSchema->setNameFormat('member[%s]');

    $this->setValidators(array(
      'login_id' => new sfValidatorPropelChoice(array('model' => 'Member', 'column' => 'login_id', 'required' => true)), 
      'pwd' => new sfValidatorPropelChoice(array('model' => 'Member', 'column' => 'pwd', 'required' => true))
    ));

    $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);

    parent::setup();
  }


  public function getModelName()
  {
    return 'Member';
  }

}

但这是一个错误的实现,因为sfValidatorPropelChoice只能确保用户输入列中确实存在的值。这意味着如果数据库包含以下行,

login_id | PWD
约翰,12345
彼得,67890

使用john和67890登录的用户将成功。 我的问题是,我应该使用哪个验证器来纠正问题?

2 个答案:

答案 0 :(得分:2)

没有好办法完成这项工作。在sfGuard表单中验证传入的数据并在使用表单数据登录用户后,这里是示例

  

if($ this-> form-> isValid()){
  $ values = $ this-> form-> getValues();
  $这 - >的getUser() - >登入($值[ '用户']);   }

我不知道也许1 sfValidatorAnd 做了类似的事情,但是登录进程在web应用程序中非常重要,所以,你应该处理你的代码这个进程。

http://www.symfony-project.org/forms/1_2/en/B-Validators#chapter_b_sub_sfvalidatorand

答案 1 :(得分:1)

您应该使用自己的后验证器,因为您尝试一次验证2个表单字段。或者您可以使用sfGuardPlugin并忘记这个问题。