Что вам нужно, это пользовательский валидатор. вы можете сделать это, продлевая 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 для получения дополнительной информации о том, как писать валидаторы.
Ваш ответ прекрасен, но в моем случае мне нужно извлечь все недопустимые значения, разделенные запятой, и показать все эти значения, как в ошибке, как элемент текстовой области. Поэтому по предложенному методу я могу вернуть только true или false для проверки валидатора, но не может собирать недопустимые значения. Итак, что я сделал, наконец, когда-то проверяю форму с помощью $ form-> isValid ($ _ POST), я взорвав значения и проверяю отдельно, что они находятся в базе данных, я собираю тогда все и генерирую ошибку msg, используя $ element-> addError ($ invalid_csv. инвалид'); –