6

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

Category hasMany Point
Point belongsTo Category

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

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

我认为它可以完成

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

2 回答 2

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 的回答就是自动魔法发挥作用的一个例子。

于 2010-04-20T05:26:48.533 回答
6

在控制器中:

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

在视图中:

$form->input('category_id',array('type'=>'select'));
于 2010-04-17T13:20:16.120 回答