Zend验证:如何在textarea中为zend_validate_DbRecordExist验证逗号分隔值中的每个单独值?

时间:2012-04-02 06:49:07

标签: zend-framework zend-validate

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

我该如何实现?

2 个答案:

答案 0 :(得分: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()

但是,如果你的表单元素不止一次被调用,并且以不同的形式被调用,那么我不建议你使用回调,但是你最好编写自己的验证器,理论仍然是一样的虽然。 Take a look here有关如何编写验证器的更多信息。

答案 1 :(得分:2)

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