1

我有文本框,您可以在其中添加逗号分隔值的值。表单发布后,我想根据数据库表检查每个 CSV 值是否已经存在。如果是这样,那么我想抛出错误消息,否则很好。

我该如何实施?

4

2 回答 2

4

您需要的是自定义验证器。您可以扩展它,Zend_Validate_Abstract也可以简单地使用回调验证器

为此,您需要将其添加到您的元素中:

$elem = new Zend_Form_Element_Text('elem_name');
$elem->setLabel('Label Name:')
         ->setRequired(true)
         ->addValidator('callback', true, array('callback' => array($this, 'functionName')));
$this->addElement($elem);

在同一个类中(通常你的表单在一个扩展 Zend_Form 的类中),你添加这个方法:

public function functionName($csvString) {
    // stuff here using explode(',', $csvString)
    // foreach() to iterate over the result and match against the db each $value
}

有关详细信息,请参阅explode()

但是,如果您的表单元素将被多次调用并且以不同的形式调用,那么我不建议您使用回调,但您最好编写自己的验证器,但理论保持不变。在这里查看有关如何编写验证器的更多信息。

于 2012-04-02T08:07:30.563 回答
2

我真的怀疑这是否可以直接使用 Zend_Validate_Db_RecordExists 来实现。我认为最好的解决方案是为此目的创建一个自定义验证器。可以获取您的值的东西然后基于 a 将其$valueArray = explode(',', $value);分解,然后为每个 $valueArray 检查元素是否存在于数据库中。这应该不会太难。如果您不了解自定义验证器,这可能会有所帮助。

于 2012-04-02T08:06:19.037 回答