【问题标题】:Add options with same values but different Caption using addMultioption in zend form使用 zend 形式的 addMultioption 添加具有相同值但不同 Caption 的选项
【发布时间】:2012-06-09 06:06:12
【问题描述】:

我正在使用 zend 表单元素创建一个选择框。现在我有一个要显示在选择框中的值列表,这些值可能具有相同的值但不同的标题。 Zend 表单不会显示具有相同值的两个选项。我的代码如下:

$this->addMultiOption('','-- Select ****** --');
foreach($options as $option) {
    $this->addMultiOption($option->value,$option->caption);
}

此处选项的值可以相同,例如 1,2,3,4,1,2,6,7,8,2,3,2,1... 选项的标题不同,例如 aaa,bbb,ccc,ddd,eee,fff

aaa 可以有值 1,bbb 也可以有值 1,在这种情况下它只会显示 bbb,依此类推。

有没有办法让它工作?

提前致谢。

【问题讨论】:

    标签: php zend-framework zend-form zend-form-element


    【解决方案1】:

    你可以在这里看到 addMultiOption 的实现。您会注意到它会将您的选项转换为字符串,然后强制其上的值,覆盖您发现的以前的值。

    /**
     * Add an option
     *
     * @param  string $option
     * @param  string $value
     * @return Zend_Form_Element_Multi
     */
    public function addMultiOption($option, $value = '')
    {
        $option  = (string) $option;
        $this->_getMultiOptions();
        if (!$this->_translateOption($option, $value)) {
            $this->options[$option] = $value;
        }
    
        return $this;
    }
    

    可能的解决方案可能是在选项中添加一个后缀,该后缀是您在分析时截断的随机字符串。您还可以创建不同的选项并使用映射数组对其进行映射。

    <select>
        <option value="car">Car</option>
        <option value="toy">Toy</option>
    <select>
    

    带数组

    $mapping = array(
        'car' => 'car',
        'toy' => 'car'
    );
    
    $trueValue = $mapping[$formOption];
    

    【讨论】:

    • 感谢 TDBishop。正如你所建议的,我将 $value 作为后缀添加了 _ 到 $option。现在我可以使用 list 来查找选项以及选项的值并存储在数据库中。 :) 感谢您的建议。
    【解决方案2】:

    按照 TDBishop 的建议,我对代码做了一些小的改动。

    $this->addMultiOption('','-- Select ****** --');
    foreach($options as $option) {
        $this->addMultiOption($option->value."_".$option->caption,$option->caption);
    }
    

    在这里,正如我之前提到的,标题总是不同的,所以即使“值”相同,在后缀中添加标题也会使每个新值都不同。现在,在分析数据时,我可以使用explode 解析这些值并同时利用它们。 :)

    【讨论】:

      【解决方案3】:

      这是我更改值的代码 - 稍后我将在 ZEND 控制器或其他地方只计算字符串的第一部分。 希望能帮助到你。

      $StaffContractTypeData=array();//我要在select中的数据选项

          $options=array();//temp storage array
          $i=0;//iteration counter
      
          $fk_id_staff_contract_type->addMultiOption("","");//one empty option in my select 
      
          foreach($StaffContractTypeData as $v) {
      
              if(in_array($v["code"], $options)){//append the iterator value
                  $fk_id_staff_contract_type->addMultiOption($v["code"].$i,$v["label"]);
              }else{
                  $fk_id_staff_contract_type->addMultiOption($v["code"],$v["label"]);
                  array_push($options, $v["code"]);
              }
              $i++;//change iterator value
          }
      

      【讨论】:

      • 而不是添加迭代器计数为什么不添加对象的 $id 如果它来自 DB 那么它是唯一的 $fk_id_staff_contract_type->addMultiOption($v["code"].$id,$ v["标签"]);
      猜你喜欢
      • 1970-01-01
      • 2022-01-11
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 2020-06-15
      相关资源
      最近更新 更多