使用Cakephp在select中显示重复的选项值

时间:2010-08-12 10:31:17

标签: cakephp select duplicates options

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


例如,这是$ form-&gt;输入的'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>


干杯,
尼古拉斯。

2 个答案:

答案 0 :(得分:1)

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

但正如此article蛋糕所述,知道如何在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是否已经支持它。

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

答案 1 :(得分:0)

因为担心这个问题比我初想的要深,而且它是由PHP引起的,它显然不允许重复密钥。

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

  1. 创建新帮助,扩展FormHelper
  2. 将表单助手中的原始函数__selectOptions()复制到新的帮助程序中
  3. 只需更改此行:
    foreach ($elements as $name => $title) {
    by:
    foreach ($elements as $title => $name) {
  4. 完成!
  5. 这不是最好的解决方案,就好像你想要将cakephp更新到最新版本后,你必须再次复制/粘贴该功能,并做同样的伎俩。


    如何使用

    1. 反过来声明您的options数组:array('description' => 'key);
    2. 在您看来,只需执行$form->input
    3. ,而不是$yourhelper->input


      尼古拉斯。