0

我有以下带有 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”。在列表框工作后,我需要进行一些字符串操作,很高兴看到输出。

更新 - 我进入 /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,我在任何地方都看不到位置

4

2 回答 2

0

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

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

或者,如果它实际上不是用于“位置”模型,则将表单中的“位置”替换为create()正确的模型,或者null如果它根本不是模型,则使用:

$this->Form->create(null);

于 2013-04-20T23:50:56.563 回答
0

我想通了,并决定其他人可能会觉得它很有用。

数组需要格式化为

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

所以,我用

$options = array(
    'NYC' => 'NYC',
    'LA' => 'LA');
于 2013-04-21T00:45:38.860 回答