获取具有相同名称的元素zend框架

时间:2012-04-15 09:59:33

标签: zend-framework zend-form

我有一个场景,我正在添加多个资格,我将值保存在隐藏字段中,如

 $("<input/>",{type:'hidden',value:deg,name:'degree[]'}).attr("data-deg",deg).appendTo("form");

$("<input/>",{type:'hidden',value:year,name:'year[]'}).attr("data-year",year).appendTo("form");

$("<input/>",{type:'hidden',value:inst,name:'inst[]'}).attr("data-inst",inst).appendTo("form");

如果我做var_dump它会显示以下输出

["degree"]=> array(2) { [0]=> string(4) "M.Sc" [1]=> string(4) "B.Sc" }

在控制器中我得到它

$Degree = $form->getValue('degree[]'); 

但是var_dump($ Degree)给了我NULL,我怎样才能得到值plz help

修改

这是我的表格看起来像

$degreename = $this->createElement('select', 'degreename')
        ->setRequired(true);
        $degreename->removeDecorator('label');
        $degreename->removeDecorator('htmlTag');
        $degreename->removeDecorator('Errors');
        $ddloptions = $this->db->GetDegrees();
        $degreename->setMultiOptions($ddloptions);
        $degreename->addMultiOptions(array(
                '0'=>'--Select Degree--'
        ));
        $degreename->setValue(0);


        $passingyear = $this->createElement('select', 'passingyear')
        ->setRequired(true);
        $passingyear->removeDecorator('label');
        $passingyear->removeDecorator('htmlTag');
        $passingyear->removeDecorator('Errors');
        $passingyear->addMultiOptions(array(
                '0'=>'--Select Passing Year--',
                '1950'=>'1950',
                '1951'=>'1951',
                '1952'=>'1952',
        )
        );
        $passingyear->setValue('0');


$institute = new Zend_Form_Element_Text('institute');
$institute->setRequired(false)
->addFilter('StripTags')
->addFilter('StringTrim');
$institute->removeDecorator('label');
$institute->removeDecorator('htmlTag');
$institute->removeDecorator('Errors');

虽然degreenamepassing year是必需的,但它们始终具有0 institute的值,我设置为false,用户可以添加多个资格和在每个用户选择时,我添加一个隐藏的字段,如上所示

2 个答案:

答案 0 :(得分:2)

创建度数实例时,请将其设置为数组

  $degree = new Zend_Form_Element_Hidden('degree');
  $degree->setIsArray(true);

现在$form->degree->getValue() ; //will return array ;

答案 1 :(得分:1)

怎么样

$Degree = $form->getValue('degree'); 
'degree[]' is not a proper key in php and the POST request

<强> UPDATE1:
你隐藏元素的Javascript片段仍然让我感到困惑,我想知道你是否有$形式的“学位”元素。要得到最终答案,最好知道你在$ form中使用了什么。

如果您只需要提交的数据(按原样),您可以从$ _POST获取信息。你不需要Zend_Form。

<强> UPDATE2:
现在看到你的表格代码雾,如果提升;你错过了隐藏元素的元素。当您致电isValid($_POST)时,表格中没有任何内容可以验证数据。调用getValue('degree')或实际上任何隐藏元素都将返回NULL。

如果您只想要数据,只需$ _POST即可,但这不是真正安全的数据处理。 Zend_Form元素允许您添加过滤器和验证器以清理数据。为此,您必须使用Zend_Form创建隐藏元素(仅使用Javascript添加值)或在表单中使用仅用于验证的元素。您可以使用if ( !empty($_POST) )之类的内容添加它们进行验证。