Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在symfony表单中,我如何验证查询db的字段(即密码)是否正确?_Php_Symfony1_Validation_Symfony Forms - Fatal编程技术网

Php 在symfony表单中,我如何验证查询db的字段(即密码)是否正确?

Php 在symfony表单中,我如何验证查询db的字段(即密码)是否正确?,php,symfony1,validation,symfony-forms,Php,Symfony1,Validation,Symfony Forms,新手问题 我在symfony中创建了一个非常简单的LoginForm类。它检查用户是否在字段中插入用户名和密码,并按预期工作 // UserLoginForm :: configure() $this->setWidgets(array( 'username' => new sfWidgetFormInputText(), 'password' => new sfWidgetFormInputPassword(), )); $this->setValidator

新手问题

我在symfony中创建了一个非常简单的LoginForm类。它检查用户是否在字段中插入用户名和密码,并按预期工作

// UserLoginForm :: configure()

$this->setWidgets(array(
  'username' => new sfWidgetFormInputText(),
  'password' => new sfWidgetFormInputPassword(),
));
$this->setValidators(array(
  'username' => new sfValidatorString(array('required' => true),
  'password' => new sfValidatorString(array('required' => true)
));


// Action :: executeLogin()

$this->loginForm = new UserLoginForm();

if ($request->isMethod('post')) {
    $params = $request->getParameter('login');
    $this->loginForm->bind($request->getParameter('login'));

    if ($this->loginForm->isValid()) {
        // ... more code                
    }
}
现在我试图检查数据库中是否存在用户名字段,如果它不存在,我想使表单无效。密码也一样:如果用户名+密码对不存在,但具有不同的消息

我试图通过两种可能的方式找到解决方案:

在动作中:

  • 查询数据库
  • 检查用户名
  • 使表单用户名字段无效(我希望在生成的HTML中显示错误消息)
  • 用户名+密码检查也一样
在这种情况下,如何使表单无效? 如何处理模板中的错误消息

在调用isValid()方法的form类中:

  • 向setValidator()添加一些内容
  • 或者添加一个调用查询模型的私有函数的后验证器
在这种情况下,如何在Form类中使用模型

哪种方法最好/最快?
其他可能性?

我认为查看的验证程序代码对您非常有用。他们创建了后验证器,然后。即使您不想使用sfDoctrineGuardPlugin(如果您使用的是spreep,则使用sfGuardPlugin),它的代码也是一个很有价值的灵感来源

因此,基本上我必须创建一个访问数据库的自定义验证器,并将其设置为表单类中的post验证器。只需查看链接,并执行相同的操作。(或者只使用sfGuardPlugin!)