CakePHP:如何从DataBase创建OptGroup下拉列表?

时间:2015-04-24 10:11:46

标签: php database cakephp-2.0

我是CakePHP的新手,正在开发一个新项目。我只是想知道,如何显示从数据库中提取的optgroup下拉列表。

我想获取如下所示的数组

$arr = array(
    'optgroup' => array(
        '1','2','3'),
     'optgroup2' => array(
         '1','2','3')
);     

1 个答案:

答案 0 :(得分:2)

我假设您已经设置了模型。

在您的控制器中,您需要为find(list)次调用的结果分配变量,然后为set()调用。这是一个项目的示例,其中我有请求,货币等的下拉列表:

    $requests = $this->Purchase->Request->find('list');
    $currencies = $this->Purchase->Currency->find('list', $options);
    $shippingCurrencies = $this->Purchase->ShippingCurrency->find('list', $options);
    $finalCurrencies = $this->Purchase->FinalCurrency->find('list', $options);
    $receivers = $this->Purchase->ReceiverUser->find('list');
    $this->set(compact('requests', 'currencies', 'shippingCurrencies', 'finalCurrencies', 'receivers'));

(您也可以通过一系列$this->set(...)调用来实现这一目标,而不是使用变量和$this->set(compact(...))。)

然后在您的视图中使用Form->input()调用来生成select语句。这是另一个例子:

    $empty_currency = array('empty'=>'(choose a currency)');
    ...
    echo "<table class=\"all order\"><tr><td>\n";
    echo $this->Form->input('tax_currency_id', $empty_currency);
    echo "</td></tr></table>\n";
    echo "<table><tr><td colspan='2' class='all order receive'>\n";
    echo $this->Form->input('shipping_comment');
    echo "</td></tr><tr class='all order costing'><td>\n";
    echo $this->Form->input('shipping_cost');
    echo "</td><td>\n";
    echo $this->Form->input('shipping_currency_id', $empty_currency);
    echo "</td></tr></table>\n";

有时,如果您没有完全遵循命名约定,则必须在输入调用中指定array(...'type'=>'select')。这是一个例子:

    echo $this->Form->input('budget_year_dflt', array('type'=>'select', 'options'=>$budgetYears, 'label'=>'Default Budget Year'));

如果您是cakephp的新手,请在开始开发之前,先做好自己的工作,然后在进行表设计之前仔细阅读并理解命名约定。如果你遵循他们的惯例那么生活是如此容易,如果你不遵守他们那么努力......