【问题标题】:Displaying duplicate options values in a select with Cakephp使用 Cakephp 在选择中显示重复的选项值
【发布时间】:2011-03-28 20:38:10
【问题描述】:

使用 Cakephp 1.3 中的表单助手,我试图显示一个列表(下拉列表),其中包含几个重复的值字段(当然在 <option> 标记中),但蛋糕似乎不想让我这样做,并且只输出每个值的第一次出现。


例如,这里是 $form->input 的 'options' 数组:

array(
    0 => 'description 0',
    0 => 'description 1',
    0 => 'description 2',
    1 => 'description 3'
);


这将输出如下内容:

<select>
    <option value="0">description 0</option>
    <option value="1">description 3</option>
</select>

我正在寻找这个结果:

<select>
    <option value="0">description 0</option>
    <option value="0">description 1</option>
    <option value="0">description 2</option>
    <option value="1">description 3</option>
</select>


干杯,
尼古拉斯。

【问题讨论】:

    标签: cakephp select duplicates options


    【解决方案1】:

    当然,你不能在 PHP 的数组中使用相同的键两次。

    但正如article cake 中所述,知道如何在 2.x 中创建多个具有相同值的键:

    $options = array(
        ...
        array('name' => 'United states', 'value' => 'USA'),
        array('name' => 'USA', 'value' => 'USA'),
     );
    
     $html = $this->Form->select('field', $options);
    

    导致

    <option value="USA">United states</option>
    <option value="USA">USA</option>
    

    如您所见,您现在在这里获得了两次(当然更多)您的价值。

    请参阅表单助手类本身的文档 (cake2.x)。 不过,不确定 1.3 是否已经支持它。

    如果您升级,您将能够利用蛋糕的所有最新魔法。

    【讨论】:

      【解决方案2】:

      所以担心问题比我最初想象的要深,它是由 PHP 引起的,它(显然)不允许重复键。

      所以这是我的解决方案(如果有人感兴趣的话):

      1. 创建一个新助手扩展 FormHelper
      2. 复制表单助手中的原始函数__selectOptions() 到您的新助手中
      3. 只需更改此行:
        foreach ($elements as $name =&gt; $title) {
        by :
        foreach ($elements as $title =&gt; $name) {
      4. 完成!

      这不是最好的解决方案,如果你想在这样做之后将你的 cakephp 更新到最新版本,你必须再次复制/粘贴该函数,并执行相同的技巧。


      如何使用:

      1. 反过来声明你的options数组:array('description' =&gt; 'key);
      2. 在你看来,与其做$form-&gt;input,不如做$yourhelper-&gt;input


      尼古拉斯。

      【讨论】:

        猜你喜欢
        • 2019-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        • 2018-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多