Zend framework zend_form——如何获取除禁用元素之外的表单值
我想使用zend_表单来验证和过滤POST数据,一些表单字段被禁用, 但是当我使用$form->isValid($post)过滤数据并使用$form->getValues()获取过滤后的数据时,它会返回所有元素值(包括我不想要的禁用元素值) 例如:Zend framework zend_form——如何获取除禁用元素之外的表单值,zend-framework,zend-form,Zend Framework,Zend Form,我想使用zend_表单来验证和过滤POST数据,一些表单字段被禁用, 但是当我使用$form->isValid($post)过滤数据并使用$form->getValues()获取过滤后的数据时,它会返回所有元素值(包括我不想要的禁用元素值) 例如: <form method="post" action=""> <input type="text" disabled="disabled" name="account_id" value="123456"> <inpu
<form method="post" action="">
<input type="text" disabled="disabled" name="account_id" value="123456">
<input type="text" name="name" value="">
<input type="text" name="email" value="">
<input type="text" disabled="disabled" name="created_date" value="2011-06-12">
<input type="text" disabled="disabled" name="created_by" value="admin">
<input type="submit">
</form>
那么,有没有办法去掉禁用元素的值呢?
(因为有许多字段和禁用的元素,所以我不想手动修剪它们)
谢谢 这是一种黑客行为。我们获取所有元素,并对其进行迭代。当我们看到一个元素被禁用时,我们可以跳过
$somearray = array();
$elements = $form->getElements();
foreach ($elements as $key => $element) {
//echo $key;
if( $element->disabled ) {
continue;
}
$somearray[$key] = $element->getValue();
}
希望这有帮助,或者你可以破解它;) 这是一种黑客行为。我们获取所有元素,并对其进行迭代。当我们看到一个元素被禁用时,我们可以跳过
$somearray = array();
$elements = $form->getElements();
foreach ($elements as $key => $element) {
//echo $key;
if( $element->disabled ) {
continue;
}
$somearray[$key] = $element->getValue();
}
希望这有帮助,或者你可以破解它;) 看起来这不是一个bug,而是一个公认的表单验证工作流。见此: 看来公认的解决方案/诀窍是使用 $form->isValidPartial($this->getRequest()->getPost()) $form->isValidPartial($this->getRequest()->getPost()) 而不是 $form->isValid($this->getRequest()->getPost()) $form->isValid($this->getRequest()->getPost())
isValidPartial仅测试post中存在的表单字段。禁用的元素不应以发布结束。看起来这不是错误,而是验证表单的公认工作流。见此: 看来公认的解决方案/诀窍是使用 $form->isValidPartial($this->getRequest()->getPost()) $form->isValidPartial($this->getRequest()->getPost()) 而不是 $form->isValid($this->getRequest()->getPost()) $form->isValid($this->getRequest()->getPost())
isValidPartial仅测试post中存在的表单字段。禁用的元素不应以发布结束。您得到答案了吗?您的表单为什么可以发布禁用的元素值?这是违反规范的。你得到答案了吗?为什么你的表单可以发布禁用的元素值?这是违反规范的。他正在尝试
$form->getValues()获取过滤数据,它返回所有元素值(包括我不想要的禁用元素值)
。因此,isValidPartial()
似乎不是问题所在。我敢肯定你是错的。getValues()获取isValid或isValidPartial函数验证/筛选的所有值。isValidPartial仅验证文章中的元素。禁用的元素将永远不会成为帖子的一部分。在本例中,输入元素被禁用。因此,它无法接收用户输入,其值也不会随表单一起提交。“是的,您是对的,禁用的元素不会在post中出现。这对我来说是新鲜事。谢谢你的提示。通常禁用的元素不会发布,但用户可以轻松更改,因此请相信发布数据不安全。他正在尝试$form->getValues(),以获取过滤后的数据,它将返回所有元素值(包括我不想要的禁用元素值)
。因此,isValidPartial()
似乎不是问题所在。我敢肯定你是错的。getValues()获取isValid或isValidPartial函数验证/筛选的所有值。isValidPartial仅验证文章中的元素。禁用的元素将永远不会成为帖子的一部分。在本例中,输入元素被禁用。因此,它无法接收用户输入,其值也不会随表单一起提交。“是的,您是对的,禁用的元素不会在post中出现。这对我来说是新鲜事。谢谢你的提示。通常被禁用的元素不会发布,但是用户可以很容易地更改,所以请相信发布数据是不安全的。