CakePHP - 选择未在POSTED数据中正确显示的框项目

时间:2013-04-20 22:44:39

标签: php cakephp

我在CakePHP中有以下选择框。

//Users/settings.ctp

$options = array('NYC', 'LA');      

    echo $this->Form->create('Location');
    echo $this->Form->input('Location', array('type' => 'select', 'options' => $options)); 
    echo $this->Form->end(__('Submit')); 

在UsersController中我有

public function settings($id = null){
    if ($this->request->is('post')) {
        $location = $this->request->data;
        //$location = $location['Location']['Location'][0];
        $this->Session->setFlash( __(print_r($location))); //displays '1' in the alert no matter the selection
    }
}

当我在原始数据上使用print_r时,它会显示以下内容。

Array ( [Location] => Array ( [Location] => 0 ) )

所以我有两个问题

  1. 正在选择项目的索引,而不是项目本身
  2. setFlash窗口始终显示“1”。我让列表框工作后我需要做一些字符串操作,很高兴看到输出。
  3. 更新 - 我进入了/Cake/View/Helper/FormHelper.php并做了一些挖掘

    我在下一行做了一个print_r

    $attributes = $this->_initInputField($fieldName, array_merge(
            (array)$attributes, array('secure' => self::SECURE_SKIP)
        ));
    

    导致了

    Array ( [value] => 0 [class] => [name] => data[Users][Location] [id] => UsersLocation )
    

    传递的值是0,我看不到任何位置

2 个答案:

答案 0 :(得分:0)

您正在为“位置”模型创建表单,但您需要指定选择的字段:

echo $this->Form->input('Location.location', array('type' => 'select', 'options' => $options));

或者,如果它实际上不是“位置”模型,则将create()形式的“位置”替换为正确的模型,或者如果它不是模型则使用null

$这 - >形状配合>创建(空);

答案 1 :(得分:0)

我想出来并决定其他人可能会觉得它很有用。

数组需要格式化为

$options = array(
   'value' => 'Display');

所以,我用了

$options = array(
    'NYC' => 'NYC',
    'LA' => 'LA');