zend form validation

可紊 提交于 2019-12-10 09:37:08

问题


I wonder how Zend_Form validates inputs, I mean how does it know which input fields to validate. I looked to php globals($_POST, $_GET) and I didn't see anything set as an identifier(for example ) in order to know how validate. Can anyone suggest me any guide for this stuff?


回答1:


Well, the best option to find out is to look at the code of 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;
}

which means in a nutshell, Zend_Form will iterate over all the configured elements in the form and compare them against the values in the array you passed to it. If there is a match, it will validate that individual value against the configured validators.




回答2:


So, you create form in action and then check is there post|get data. You can check is_valid form right here. You need pass $_POST or $_GET data to isValid() function. Example:

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

isValid() is function Zend_Form class. Form runs all validations for each element (just if you dont set to stop in first validation fail) and then for subforms too.




回答3:


Look at Zend_Form quickstart, it's a very bright example on how to start dealing with forms in Zend.

Validating a text input looks like this:

$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');



回答4:


Or you can use:

    $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);


来源:https://stackoverflow.com/questions/5457027/zend-form-validation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!