目前,我的登录表单如下所示,
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登录的用户将成功。 我的问题是,我应该使用哪个验证器来纠正问题?
答案 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
并忘记这个问题。