ZF:GET参数重复

时间:2011-03-25 14:21:00

标签: zend-framework forms get zend-form

作为ZF: how to check GET request?的补充。

我有两个输入字段和一个复选框。表格是标准的。

public function init()
{
    $this->setMethod('GET');

    $new = new Zend_Form_Element_Checkbox('new');
    $new->setLabel('New')
        ->setOrder(3);

    $app = new Zend_Form_Element_Select('app');
    $app->setLabel('System')
          ->setOrder(2)
          ->setRequired()
          ->addMultiOptions(array('0' => ' ----------- ') + $applications);

    $cat = new Zend_Form_Element_Select('cat');
    $cat->setLabel('Theme')
          ->setOrder(1)
          ->setRequired()
          ->addMultiOptions(array('0' => ' ----------- ') + $categories);

    $submit = new Zend_Form_Element_Submit('submit');
    $submit->setLabel('Search')
          ->setOrder(4);

    $this->addElements(array(
        $cat, $app, $new, $submit
    ));
}

1)我提交新的0:http://site.com/?cat=0&app=0&new=0

2)我做提交,其中new为1:http://site.com/?cat=0&app=0&new=0&new=1

为什么新字段会重复?如果new = 1

,如果不存在new = 0,我会很高兴

2 个答案:

答案 0 :(得分:5)

我认为这是因为Zend_From会在您的复选框旁边创建一个隐藏的输入字段。这样做是因为当未选中复选框时,根据定义,没有与复选框关联的值被发送到服务器。所以Zend_Form会创建隐藏字段,以便在取消选中复选框时发送内容。但是,缺点是当选中复选框时,会发送两个值,即隐藏的值和复选框的实际值。

答案 1 :(得分:2)

为什么要关心?它应该工作得很好吗?

如果你关心任何原因,你可以创建My_View_Helper_MyCheckbox,它不会创建隐藏元素并分配它(很容易,不需要兼顾wnd zend_view_helper前缀),如下所示:

$decorators = $form->new->getDecorators();
//see which key is ViewHelper and assing it to $key variable
$decorators[$key] = new My_View_Helper_MyCheckbox();
$form->new->setDecorators($decorators);

但请注意,这可能带来一些复杂性 - 例如复选框可能无法验证未经检查的状态,您现在甚至无法想到任何其他许多缺陷。所以明智地考虑;)

希望它有所帮助;)