作为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,我会很高兴答案 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);
但请注意,这可能带来一些复杂性 - 例如复选框可能无法验证未经检查的状态,您现在甚至无法想到任何其他许多缺陷。所以明智地考虑;)
希望它有所帮助;)