Проверка Zend: Как проверить каждое отдельное значение в разделенных запятыми значениях в textarea для zend_validate_DbRecordExist? - PullRequest
1 голос
/ 02 апреля 2012

У меня есть текстовое поле, в котором вы добавляете значения через запятую. Как только форма будет опубликована, я хочу проверить каждое из значений CSV по таблице базы данных, если каждый из них уже существует. Если это так, то я хочу выдать сообщение об ошибке, иначе это нормально.

Как я могу это реализовать?

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012

Вам нужен пользовательский валидатор . вы можете сделать это, расширяя 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 () для получения дополнительной информации.

Однако, если ваш элемент формы будет вызываться более одного раза и в разных формах, тогда я не рекомендую вам использовать обратный вызов, но вам лучше написать свой собственный валидатор, теория остается прежней хоть. Посмотрите здесь для получения дополнительной информации о том, как писать валидаторы.

2 голосов
/ 02 апреля 2012

Я действительно сомневаюсь, что этого можно достичь напрямую, просто используя Zend_Validate_Db_RecordExists. Я думаю, что лучшим решением было бы создать специальный валидатор для этой цели. Что-то, что получило бы ваше значение, затем взорвало его на основе $valueArray = explode(',', $value);, а затем для каждой проверки $ valueArray, существует ли элемент в БД. Это не должно быть слишком сложно. Если у вас нет представления о пользовательских валидаторах , вам может помочь .

...