2013-09-05 114 views
1

我需要的员工的名单,但是,年龄信息太(列),在换句话说:自定义列表找到CakePHP中

<option value="id" data-age="age">Name</option> 

我怎么能这样做在CakePHP中?只有一个foreach?例如:

foreach ($employees as $emp) { ?> 
    <option 
     value="<?php echo $emp['Employee']['id'] ?>" 
     data-age="<?php echo $emp['Employee']['age'] ?>"> 
     <?php echo $emp['Employee']['name'] ?> 
    </option> 
<?php } ?> 

而且,我怎么能做到这一点保持name/id CakePHP所产生?

+3

创建自己的帮助程序,扩展cakephp的表单助手。覆盖'select'方法并添加您自己的支持。或者就像你发布的那样。 – Rob

+0

事实上,表单助手已经能够做到这一点,至少在Cake 2.x中,不知道老年人的Cake版本很难... – ndm

+0

@ndm我不知道那个人。谢谢 –

回答

6

如果您使用的是蛋糕2.x的,那么你可以让FormHelper为你做这个,你只需要的选项数据格式正确,并通过正确我的意思是列保持阵列,至少namevalueoption元素文本和id属性的密钥,所有其他条目将被映射为属性,其中密钥用作属性名称,值用作属性值。

https://github.com/cakephp/cakephp/blob/2.0.2/lib/Cake/View/Helper/FormHelper.php#L2325

下面是一个未经测试的例子。该选项的数据应该是这样的:

$options = array 
(
    array 
    (
     'name' => 'employee-a', 
     'value' => 1, 
     'data-age' => 20, 
    ), 
    array 
    (
     'name' => 'employee-b', 
     'value' => 2, 
     'data-age' => 30, 
    ), 
    array 
    (
     'name' => 'employee-c', 
     'value' => 3, 
     'data-age' => 40, 
    ), 
); 

然后只需将它传递给创建select元素的形式助手:

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

这应该生成以下HTML:

<select id="ModelEmployeeId" name="data[Model][employee_id]"> 
    <option value="1" data-age="20">employee-a</option> 
    <option value="2" data-age="30">employee-b</option> 
    <option value="3" data-age="40">employee-c</option> 
</select>