Zend framework zend_form——如何获取除禁用元素之外的表单值

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

我想使用zend_表单来验证和过滤POST数据,一些表单字段被禁用, 但是当我使用$form->isValid($post)过滤数据并使用$form->getValues()获取过滤后的数据时,它会返回所有元素值(包括我不想要的禁用元素值)

例如:

<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中出现。这对我来说是新鲜事。谢谢你的提示。通常被禁用的元素不会发布,但是用户可以很容易地更改,所以请相信发布数据是不安全的。