1

新手问题。

我在 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() 方法的表单类中:

  • 向 setValidator()添加一些内容
  • 或添加一个后验证器,该验证器调用一个查询模型的私有函数

在这种情况下,如何在 Form 类中使用模型?

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

4

1 回答 1

2

我认为查看sfDoctrineGuardPlugin的验证器的代码对您非常有用。他们创建该帖子验证器,并将其设置为. 即使您不想使用 sfDoctrineGuardPlugin(或者如果您使用 Propel,则使用 sfGuardPlugin),它的代码也可以成为宝贵的灵感来源。

于 2010-07-16T23:44:26.040 回答