使用CakePHP中的FormHelper创建“选择”列表框

时间:2010-04-17 13:04:51

标签: cakephp formhelper

我有两个模型,CategoryPoint。关联定义为:

Category hasMany Point
Point belongsTo Category

我希望在将Points添加到我的数据库时,能够从<select>框中选择其所属的类别以及其余的表单数据。

我需要set类别列表,我该怎么办?我将如何生成选择框?

我认为可以用

完成
$form->input('categorieslist',array('type'=>'select')); //categorieslist needs
                                                        //setting somewhere.

2 个答案:

答案 0 :(得分:7)

还要概括一下:

在可以访问表单助手的视图中

<?php
    echo $form->input( 'dataKey', array(
        'type' => 'select',
        'options' => array(
            'key1' => 'val1',
            'key2' => 'val2',
        ),
    ));
?>

以上将使用两个选项呈现选择输入。您也可以将空选项作为第一项。传递值true只会将带有空值的空选项附加到HTML中呈现的选项的开头。

<?php
    echo $form->input( 'dataKey', array(
        'type' => 'select',
        'options' => array(
            'key1' => 'val1',
            'key2' => 'val2',
        ),
        'empty' => true,
    ));
?>

您可以将字符串传递给“空”键,使其显示自定义文本作为空选项的关键字段。

<?php
    echo $form->input( 'dataKey', array(
        'type' => 'select',
        'options' => array(
            'California' => 'CA',
            'Oregon' => 'OR',
        ),
        'empty' => 'choose a state',
    ));
?>

最后一个示例,您还可以使用所选键预选一个选项。该值应与其中一个选择选项的匹配,而不是与键匹配。

<?php
    echo $form->input( 'dataKey', array(
        'type' => 'select',
        'options' => array(
            'California' => 'CA',
            'Oregon' => 'OR',
        ),
        'empty' => 'choose a state',
        'selected' => 'California',
    ));
?>

从模型

Model->find( 'list', array( ... ));将始终返回格式化的数组,以便与选择框选项一起使用。如果将数据传递给存储在具有小写复数模型名称的变量(即( $this->set( 'categories', $categories );)中的视图,则可以通过在视图中使用表单帮助程序并向其传递数据来自动生成相关模型的下拉列表单数形式的相同型号名称的索引,后缀为“_id”。

第2页的

Aziz's answer就是那种自动化的例子。

答案 1 :(得分:6)

在控制器中:

$categories = $this->Point->Category->find('list');
$this->set(compact('categories'));

在视图中:

$form->input('category_id',array('type'=>'select'));