zend表单验证

ayk*_*man 4 php validation zend-framework zend-form

我想知道Zend_Form如何验证输入,我的意思是它如何知道要验证的输入字段.我查看了php全局($ _ POST,$ _GET),我没有看到任何设置为标识符(例如),以便知道如何验证.有谁能建议我这个东西的任何指南?

Gor*_*don 8

那么,找出的最佳选择是查看以下代码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;
}
Run Code Online (Sandbox Code Playgroud)

简而言之,Zend_Form它将迭代表单中的所有已配置元素,并将它们与传递给它的数组中的值进行比较.如果匹配,它将根据配置的验证器验证该单个值.