【问题标题】:Get the elements with same name zend framework获取zend框架同名的元素
【发布时间】:2012-04-15 09:59:33
【问题描述】:

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

 $("<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,我怎样才能得到值请帮助

编辑

这是我的表单看起来像

$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 用户可以添加多个资格,并且在每个用户选择时我添加一个隐藏字段,例如如上所示

【问题讨论】:

    标签: zend-framework zend-form


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      怎么样

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

      更新1:
      你的隐藏元素的 Javascript 部分仍然让我有点困惑,我想知道你是否在 $form 中有一个“学位”元素。要获得最终答案,最好了解您在 $form 中使用的内容。

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

      更新 2:
      现在看到你的表单代码,如果解除的话;您缺少隐藏元素的元素。当您致电 isValid($_POST) 时,表单中没有任何内容可以验证数据。调用 getValue('degree') 或实际上任何隐藏元素都将返回 NULL。

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

      【讨论】:

      • degree 没用,这就是为什么我尝试了degree[] 任何我如何通过$_POST['degree'] 获取值的原因
      • 那我猜你还没用过$form-&gt;isValid($_POST)
      • 现在想一想,事实上我确实使用了$form-&gt;isValid($_POST) 我已经在网上搜索了答案以从数组中的表单帖子中获取多个值,例如涉及一些前的语法- 我负担不起的工作要做,所以我只使用了$_POST,让我回到家并确认我是否将这些字段标记为必填,但我认为我确实将它们标记为必填...+ 1 为您的时间:)
      • @john 喜欢花时间,但奇怪的是,许多人正在寻找答案中的一个热门奇迹。请参阅我的答案中的更新。
      • 虽然我已经使用$_POST 解决了这个问题,但我已经用我的表单代码更新了这个问题,这是我第一个使用 zend 的项目,我使用 zend 表单来做 zend 的事情,使用子表单也越过了我的介意,但那太多了,截止日期快到了:)
      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多