//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(); }
无论短密码或我输入的假电子邮件如何,它都会失败。
答案 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。