проверка формы Zend - PullRequest
       5

проверка формы Zend

4 голосов
/ 28 марта 2011

Интересно, как Zend_Form проверяет входные данные, я имею в виду, как он знает, какие поля ввода проверять. Я посмотрел на php globals ($ _ POST, $ _GET) и не увидел ничего, установленного в качестве идентификатора (например), чтобы узнать, как проверить. Кто-нибудь может предложить мне какое-нибудь руководство для этого материала?

Ответы [ 4 ]

8 голосов
/ 28 марта 2011

Что ж, лучший вариант выяснить это посмотреть на код Zend_Form:

/**
 * Validate the form
 *
 * @param  array $data
 * @return boolean
 */
public function isValid($data)
{
    if (!is_array($data)) {
        require_once 'Zend/Form/Exception.php';
        throw new Zend_Form_Exception(__METHOD__ . ' expects an array');
    }
    $translator = $this->getTranslator();
    $valid      = true;
    $eBelongTo  = null;

    if ($this->isArray()) {
        $eBelongTo = $this->getElementsBelongTo();
        $data = $this->_dissolveArrayValue($data, $eBelongTo);
    }
    $context = $data;
    foreach ($this->getElements() as $key => $element) {
        if (null !== $translator && $this->hasTranslator()
                && !$element->hasTranslator()) {
            $element->setTranslator($translator);
        }
        $check = $data;
        if (($belongsTo = $element->getBelongsTo()) !== $eBelongTo) {
            $check = $this->_dissolveArrayValue($data, $belongsTo);
        }
        if (!isset($check[$key])) {
            $valid = $element->isValid(null, $context) && $valid;
        } else {
            $valid = $element->isValid($check[$key], $context) && $valid;
            $data = $this->_dissolveArrayUnsetKey($data, $belongsTo, $key);
        }
    }
    foreach ($this->getSubForms() as $key => $form) {
        if (null !== $translator && !$form->hasTranslator()) {
            $form->setTranslator($translator);
        }
        if (isset($data[$key]) && !$form->isArray()) {
            $valid = $form->isValid($data[$key]) && $valid;
        } else {
            $valid = $form->isValid($data) && $valid;
        }
    }

    $this->_errorsExist = !$valid;

    // If manually flagged as an error, return invalid status
    if ($this->_errorsForced) {
        return false;
    }

    return $valid;
}

, что означает в двух словах, Zend_Form будет перебирать все настроенные элементы в форме и сравнивать их со значениями в массиве, который вы ему передали. Если есть совпадение, оно проверит это индивидуальное значение по настроенным валидаторам.

2 голосов
/ 31 марта 2011

Итак, вы создаете форму в действии, а затем проверяете, есть ли сообщение | получить данные.Вы можете проверить форму is_valid прямо здесь.Вам необходимо передать данные $ _POST или $ _GET в функцию isValid ().Пример:

if ($request->isPost() && $form->isValid($request->getPost())) {

isValid () является функцией класса Zend_Form.Форма запускает все проверки для каждого элемента (только если вы не настроили остановку при первом сбое проверки), а затем и для подчиненных форм.

1 голос
/ 28 марта 2011

Посмотрите на Быстрый запуск Zend_Form , это очень яркий пример того, как начать работать с формами в Zend.

Проверка ввода текста выглядит следующим образом:

$username = new Zend_Form_Element_Text('username');
// Passing a Zend_Validate_* object:
$username->addValidator(new Zend_Validate_Alnum());
// Passing a validator name:
$username->addValidator('alnum');
0 голосов
/ 29 июня 2011

Или вы можете использовать:

    $username_stringlength_validate = new Zend_Validate_StringLength(6, 20); 
    $username = new Zend_Form_Element_Text('username');
    $username->setLabel('Username: ')
             ->addFilters(array('StringTrim', 'HtmlEntities'))
             ->setAttrib('minlength', '6')
             ->setAttrib('class', 'required')
             ->removeDecorator('label')
             ->removeDecorator('HtmlTag')
             ->removeDecorator('DtDdWrapper')
             ->setDecorators(array(array('ViewHelper'), array('Errors')))
             ->addValidator($username_stringlength_validate);
...