【问题标题】:Creating 'select' listboxes using FormHelper in CakePHP在 CakePHP 中使用 FormHelper 创建“选择”列表框
【发布时间】:2010-04-17 13:04:50
【问题描述】:

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

Category hasMany Point
Point belongsTo Category

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

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

我认为可以通过

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

【问题讨论】:

    标签: cakephp formhelper


    【解决方案1】:

    也概括一下:

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

    <?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-&gt;find( 'list', array( ... )); 将始终返回格式化为与选择框选项一起使用的数组。如果您将数据传递到存储在具有小写复数模型名称的变量中的视图中,即( $this-&gt;set( 'categories', $categories );,那么您将通过在视图中使用表单助手并传递给它的数据索引自动生成相关模型的下拉列表以“_id”为后缀的单数形式的相同型号名称。

    #2 处的Aziz's answer 就是自动魔法发挥作用的例子。

    【讨论】:

      【解决方案2】:

      在控制器中:

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

      在视图中:

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

      【讨论】:

      • 这在 points_controller 中对吗?我在那里添加了它,它在视图中弹出一个选择框但没有填充它......
      • 没关系,我对它进行了排序......在错误的操作中有第一位:)
      • 那么可能值得用更多代码来更新您的问题。 Aziz 的建议是正确的方法,假设您的 Point 模型 belongsTo 您的 Category 模型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多