我想知道Zend_Form如何驗證輸入,我的意思是它如何知道要驗證哪些輸入字段。我期待着php全局變量($ _ POST,$ _GET),並且我沒有看到任何設置爲標識符(例如)以便知道如何驗證。任何人都可以向我推薦這個東西的任何指南?zend表單驗證
zend表單驗證
回答
看看Zend_Form quickstart,這是一個關於如何開始在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');
我明白如何使用。我不明白Zend如何執行此任務。當我提交表單時,它如何知道要驗證的輸入字段? – 2011-03-28 09:58:13
@aykut請認真閱讀鏈接教程。有一部分叫做*檢查表單是否有效*。 – fabrik 2011-03-28 10:03:41
嘛,找出最好的辦法是看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;
}
這意味着簡單地說,Zend_Form
將遍歷覆蓋表單中所有已配置的元素,並將它們與傳遞給它的數組中的值進行比較。如果匹配,它將根據配置的驗證器驗證該單個值。
所以,你創建窗體的行爲,然後檢查是否有post | get數據。你可以在這裏檢查is_valid表格。您需要將$ _POST或$ _GET數據傳遞給isValid()函數。示例:
if ($request->isPost() && $form->isValid($request->getPost())) {
isValid()是函數Zend_Form類。表單運行每個元素的所有驗證(只要你不設置停止在第一次驗證失敗),然後也爲子表單。
或者你可以使用:
$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);
- 1. Zend表單驗證
- 2. zend表單驗證+ ajax
- 3. 如何驗證Zend表單打開標記:Zend表單
- 4. 需要幫助Zend表單驗證
- 5. Zend表單驗證碼修飾器
- 6. zend表單驗證碼問題
- 7. Zend框架 - 定製表單驗證
- 8. Zend的表單驗證工作不
- 9. 表單驗證未在Zend的形式
- 10. 驗證Zend表單時排除元素
- 11. Zend 2表單驗證程序
- 12. Zend表單 - 爲什麼驗證失敗?
- 13. Zend表格驗證器foreach
- 14. Zend中的多頁表單太早驗證所有表單
- 15. 需要幫助Zend表單下拉菜單驗證
- 16. 表單驗證
- 17. 表單驗證
- 18. 表單驗證
- 19. 表單驗證
- 20. 表單驗證()
- 21. 表單驗證
- 22. Zend Framework表單元素驗證器 - 即使不需要也驗證字段
- 23. Zend貨幣驗證
- 24. Zend模型驗證
- 25. 若要添加驗證GreaterThan - Zend表格
- 26. Zend的驗證正則表達式
- 27. 爲Zend的正則表達式驗證
- 28. 驗證票(表單認證)
- 29. Zend表單驗證器沒有被觸發
- 30. 翻譯Zend表單驗證錯誤消息?
通常你傳遞值的數組形式 - $> isValid()的例如$形式 - >的isValid($ _ POST) – 2011-03-28 15:54:33
請接受給定答案中的一個或指出爲什麼他們沒有人幫助回答你的問題,所以人們有機會更新他們的答案。謝謝。 – Gordon 2011-04-07 07:31:43