Zend framework Zend Validate:如何验证Zend_Validate_DbRecordExist文本区域中逗号分隔值中的每个单独值?

Zend framework Zend Validate:如何验证Zend_Validate_DbRecordExist文本区域中逗号分隔值中的每个单独值?,zend-framework,zend-validate,Zend Framework,Zend Validate,我有一个文本框,您可以在其中添加逗号分隔的值。一旦表单发布,我想对照数据库表检查每个CSV值,看看它们是否已经存在。如果是这样,那么我想抛出错误消息,否则就可以了 如何实现这一点?我真的怀疑仅仅使用Zend_Validate_Db_RecordExists就可以直接实现这一点。我认为最好的解决方案是为此创建一个自定义验证器。将获取您的值,然后根据,$valueArray=explode(“,”,$value)将其分解,然后针对每个$valueArray检查该元素是否存在于数据库中。这应该不会太难

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


如何实现这一点?

我真的怀疑仅仅使用Zend_Validate_Db_RecordExists就可以直接实现这一点。我认为最好的解决方案是为此创建一个自定义验证器。将获取您的值,然后根据,
$valueArray=explode(“,”,$value)将其分解
,然后针对每个$valueArray检查该元素是否存在于数据库中。这应该不会太难。如果您不知道自定义验证器可能会有帮助。

我真的怀疑,仅仅使用Zend\u Validate\u Db\u RecordExists就可以直接实现这一点。我认为最好的解决方案是为此创建一个自定义验证器。将获取您的值,然后根据,
$valueArray=explode(“,”,$value)将其分解
,然后针对每个$valueArray检查该元素是否存在于数据库中。这应该不会太难。如果您不了解自定义验证器,可能会有所帮助。

您需要的是一个自定义验证器。您可以扩展
Zend\u Validate\u 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_表单的类中),添加以下方法:

public function functionName($csvString) {
    // stuff here using explode(',', $csvString)
    // foreach() to iterate over the result and match against the db each $value
}
有关更多信息,请参阅


但是,如果表单元素将被多次调用,并且是以不同的形式调用的,那么我不建议您使用回调,但是您最好编写自己的验证器,尽管理论是一样的。有关如何编写验证器的详细信息。

您需要的是一个自定义验证器。您可以扩展
Zend\u Validate\u 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_表单的类中),添加以下方法:

public function functionName($csvString) {
    // stuff here using explode(',', $csvString)
    // foreach() to iterate over the result and match against the db each $value
}
有关更多信息,请参阅


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

您的答案非常完美,但在我的例子中,我需要提取所有无效的逗号分隔值,并将所有这些值显示为错误值,如下面的文本区域元素所示。因此,通过您建议的方法,我只能为回调验证器返回true或false,但不能收集无效值。所以我最后做的是使用$form->isValid($\u POST)验证表单,我分解值并分别检查它们是否在数据库中,然后收集所有值并使用$element->addError生成错误消息($invalid_csv.'are invalid');您的答案很完美,但在我的例子中,我需要提取所有无效的逗号分隔值,并将所有这些值显示为错误值,如下面的文本区域元素所示。因此,通过您建议的方法,我只能为回调验证器返回true或false,但不能收集无效值。所以我最后做的是使用$form->isValid($\u POST)验证表单,我分解值并分别检查它们是否在数据库中,然后收集所有值并使用$element->addError生成错误消息($invalid_csv.'are invalid');