我有文本框,您可以在其中添加逗号分隔值的值。表单发布后,我想根据数据库表检查每个 CSV 值是否已经存在。如果是这样,那么我想抛出错误消息,否则很好。
我该如何实施?
我有文本框,您可以在其中添加逗号分隔值的值。表单发布后,我想根据数据库表检查每个 CSV 值是否已经存在。如果是这样,那么我想抛出错误消息,否则很好。
我该如何实施?
您需要的是自定义验证器。您可以扩展它,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()。
但是,如果您的表单元素将被多次调用并且以不同的形式调用,那么我不建议您使用回调,但您最好编写自己的验证器,但理论保持不变。在这里查看有关如何编写验证器的更多信息。
我真的怀疑这是否可以直接使用 Zend_Validate_Db_RecordExists 来实现。我认为最好的解决方案是为此目的创建一个自定义验证器。可以获取您的值的东西然后基于 a 将其$valueArray = explode(',', $value);
分解,然后为每个 $valueArray 检查元素是否存在于数据库中。这应该不会太难。如果您不了解自定义验证器,这可能会有所帮助。