Symfony表单验证

时间:2011-01-27 12:15:53

标签: symfony1

//creates a sfForm for the login
  $this->form = new sfForm();
  $this->form->setWidgets(array(
    'email' => new sfWidgetFormInputText(array('default' => 'me@example.com')),
    'password' => new sfWidgetFormInputPassword()
    )
  );

  //TODO: sfValidatorRegex on the password!
  $this->form->setValidators(array(
   'email' => new sfValidatorEmail(),
   'password' => new sfValidatorString(array(
    'min_length' => 8, 
    'max_length' => 255), 
    array(
     'min_length' => 'Password is too short. Minimum 8 characters required.')
   )));

然后我检查了提交参数的请求

if($this->form->isValid(){
   loginUser();
}

无论短密码或我输入的假电子邮件如何,它都会失败。

1 个答案:

答案 0 :(得分:2)

您没有将帖子数据绑定到表单。

您应该将表单放在单独的文件中,我假设您将其放在lib/form/LoginForm.class.php中。

在表单的configure()方法中创建名称格式:$this->widgetSchema->setNameFormat("login[%s]")

你的行动代码:

$this->form = new LoginForm();
if ($request->isMethod("post")) {
  $this->form->bind($request->getParameter("login"));
  if ($this->form->isValid()) {
    //whatever
  }
}

在从头开始创建身份验证和授权系统之前,请查看它的事实上的symfony标准:sfDoctrineGuardPlugin。它也有推进版本,称为sfGuardPlugin