从选择输入提交文本,而不是ID - CakePHP

时间:2014-01-16 20:37:43

标签: php cakephp

我有一个充满帐户名称的选择框,我通过SOAP调用从我的CRM中检索。当我使用cakePHP FormHelper创建我的表单时,我将名称发送到我的视图。我遇到的唯一问题是虽然选择正确填充它会发回我选择的索引而不是我想要的文本。

echo $this->Form->create();
  echo $this->Form->input('name');
  echo $this->Form->input('email');
  echo $this->Form->input('account');
  echo $this->Form->input('message');
  echo $this->Form->end(__('Submit')); 
echo $this->Form->end();

那么有谁知道如何提交所选的帐户价值而不是ID? 提前谢谢。

4 个答案:

答案 0 :(得分:2)

如果$ accounts是您正在使用的变量名称,您可以尝试

$accountValues = array();
foreach ($accounts as $key => $value) {
    $accountValues[$value] = $value;
} 
$accounts = $accountValues;

生成一个数组,其中键和值都相同。

答案 1 :(得分:0)

考虑到你有一个数组

$account = array('1'=>'Account Name','2'=>'Account name2',etc);

将上述数组更改为(Value => Value pair)

$account = array('Account Name'=>'Account Name',
                 'Account name2'=>'Account name2',etc);

假设您知道如何将$ account数组转换为所需的输入: 然后只需在选项中传递该数组,您将获得值而不是ID。

<?php echo $this->Form->input('account', 
                  array('type'=>'select',
                        'options'=>$account, 
                        'label'=>false, 
                        'empty'=>'Account'));
 ?>

答案 2 :(得分:0)

扩展更多蛋糕方式来实现它是拥有一个account_id表单字段

$this->Form->input('account_id');

然后将$ accounts从控制器设置为您的视图。

答案 3 :(得分:0)

在CakePHP 3.X中你可以这样做:

// somewhere inside your Controller
$optionList =
   $this->createOptionList(
       $this->Users, ['id', 'name'], 'id', 'name'
   ); 

// a reusable function to create the array format that you needs for your select input
private function createOptionArray($model, $fields, $arrayKey, $arrayValue, $limit = 200) {
   $query = $model
      ->find()
      ->select($fields)
      ->limit($limit);

   $options = array();
   foreach ($query as $key => $value) {
      $options[$value->$arrayKey] = $value->$arrayValue;
   }

   return $options;
}

createOptionArray函数创建以下数组格式:

[
    (int) 1 => 'Dennis',
    (int) 2 => 'Frans'
]

现在您可以在视图的Form-input中简单地添加此数组,如下所示:

 <?= $this->Form->input('user_id', ['options' => $optionList, 'empty'=>'Choose']); ?>