我需要使用DB表的列名填充我的表单中的列表。当我从帐户表中提取字段名称时,选项列表将如下所示:
<option value="NAME">Account Name</option>
<option value="OWNER">Account Owner</option>
在表单列表中将显示如下:
Account Name
Account Owner
我可以使用CakePHP函数执行此操作,这将直接获取列名称。或者我是否需要保留数据库表的元数据及其列描述以实现此目的。
我是CakePHP的新手。
感谢任何想法/答案。
感谢。
答案 0 :(得分:0)
您可以: 答:从控制器操作设置列表,在视图中使用,从Model :: schema()方法获取列表并“人化”每个值 B:写一个帮手方法为你做这件事
可能有更好的方法,但在找到之前,让我为你唱一首我的AppHelper代码:
<?php
class AppHelper extends Helper {
/**
* Returns and array of 'column_name' => 'Column Name' values from a model
*
* @param string $modelName
* @param type $includeModelName If true, prepends the model name to the field value
* @return array Or false if Model is unavailable
*/
function getHumanFieldNames($modelName, $includeModelName = true){
$model = ClassRegistry::init($modelName, true);
if (!$model) return false;
$schema = $model->schema();
$return = array();
foreach($schema as $field => $meta){
$return[$field] =
($includeModelName) ?
Inflector::humanize($modelName) . ' ' .Inflector::humanize($field)
: Inflector::humanize($field);
}
return $return;
}
}
?>
现在你的所有助手都有一个getHumanFieldNames方法,所以要在你的视图中使用它,请使用以下内容:
<?php
$accountFieldNames = $this->Form->getHumanFieldNames('account');
// returns array('owner' => 'Account Owner', 'name' => 'Account Name', 'bank_code' => 'Account Bank code')
//you can use any helper instead of $this->Form
//or better yet, you could write your own "utility" helper
echo $this->Form->select('database_column', $accountFieldNames);
// renders a select element with all
// model column names as values and
// human readable names as labels
?>
为方便起见,我添加了一个布尔标志作为第二个参数:
<?php
$this->Form->getHumanFieldNames('account', false);
//returns array('name' => 'Name', 'bank_code' => 'Bank Code')
$this->Form->getHumanFieldNames('account', true); // default is true
//returns array('name' => 'Account Name', 'bank_code' => 'Account Bank Code')
?>