我想知道Zend_Form如何验证输入,我的意思是它如何知道要验证哪些输入字段。我查看了php全局变量($_POST,$_GET),并没有看到任何设置作为标识符(例如),以便知道如何进行验证。有人能否向我推荐任何关于这方面的指南?
我想知道Zend_Form如何验证输入,我的意思是它如何知道要验证哪些输入字段。我查看了php全局变量($_POST,$_GET),并没有看到任何设置作为标识符(例如),以便知道如何进行验证。有人能否向我推荐任何关于这方面的指南?
要找出最佳选项,最好的方法是查看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
将遍历表单中所有配置的元素,并将它们与传递给它的数组中的值进行比较。如果匹配成功,它将针对该特定值验证所配置的验证器。因此,您可以在操作中创建表单,然后检查是否有post | get数据。您可以在此处检查is_valid表单。您需要将$_POST或$_GET数据传递给isValid()函数进行验证。例如:
if ($request->isPost() && $form->isValid($request->getPost())) {
isValid()是Zend_Form类中的函数。表单会对每个元素运行所有验证(如果您没有设置在第一个验证失败时停止),然后再对子表单进行验证。
看看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');
或者你可以使用:
$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);