我有一个文本框,您可以在其中以逗号分隔值添加值。一旦表单发布,我想检查每个CSV值对数据库表,如果它们中的每一个已经存在。如果是这样,那么我想抛出错误消息,否则没问题。
我该如何实现?
答案 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可能会有所帮助。