【问题标题】:Zend Form: How to create a 'create account form' that checks for unique username?Zend Form:如何创建一个检查唯一用户名的“创建帐户表单”?
【发布时间】:2009-11-19 22:21:02
【问题描述】:

我有一个用户可以创建帐户的表单。用户名列在数据库中是唯一的。如果用户尝试使用重复的用户名创建帐户,则会引发异常。这最终看起来很丑陋。

我正在考虑在插入数据库之前进行某种检查(可能使用 ajax),看看是否已经使用了所需的用户名。如果用户名已经被占用,我想将表单上的用户名字段设置为错误状态,并指定要显示的错误消息。

我该怎么做?

更新: Zend_Validator_Db_NoRecordExists 非常适合这类事情。这是我最终得到的结果:

// inside my create account form 
$this->addElement('text', 'username', array(
    'label'      => 'Username:',
    'required'   => true,
    'filters'    => array('StringTrim'),
    'validators' => array(
        array('StringLength', false, array(2, 50)),
        array('Db_NoRecordExists', false, array(
            'table' => 'users',
            'field' => 'username'
        ))
    )
));

【问题讨论】:

  • 您的问题中没有足够的信息。你是怎么处理的?当用户点击提交时,您是否只是将用户名字段的值“发布”到您发布整个表单的同一 URI?您必须在控制器中包含添加逻辑或使用单独的操作来仅检查此字段。
  • @Goran,我添加了一个更新,显示我在控制器中所做的事情。

标签: jquery ajax zend-framework zend-form


【解决方案1】:

Db_NoRecordExists 验证器添加到表单元素。

http://framework.zend.com/manual/en/zend.validate.set.html#zend.validate.Db

【讨论】:

    【解决方案2】:

    您应该自己检查服务器端。你不应该让数据库处理这个。然后你可以产生一个很好的错误。无论任何客户端/ajax 检查如何,您都应该这样做。

    要进行 Ajax 检查,请创建一个返回 0 或 1 的控制器。绕过视图和布局代码的一种简单方法是 exit();在控制器的末端。当您进行 Ajax 调用时,您会为结果分配一个处理程序。该处理程序读取结果并确定是否显示消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 2016-03-11
      • 1970-01-01
      相关资源
      最近更新 更多