FormHelper选择框的问题

时间:2013-05-11 19:22:20

标签: cakephp cakephp-2.2 formhelper

我有以下表格

articles (Article model)
- id
- topic_id

articles_topics (ArticleTopic model)
- id

当我在 ArticlesController add()时,我成功生成了可供选择的不同主题的选择列表,如下所示:

$this->set('topics', $this->Article->ArticleTopic->find('list'));

我的文章 add.ctp 视图使用以下代码显示已填充的选择列表:

echo $this->Form->input('topic_id', array('empty' => 'Select a Topic'));

这里一切都很好。我的问题是与其他模型,如补间程序栏和SidebarLocation。这些都是正确的。

表格是

sidebars (Sidebar model)
- id
- sidebar_location_id

sidebars_locations (SidebarLocation model)
- id

我已尝试在 SidebarsController add()中设置以下

$this->set('sidebar_locations', $this->Sidebar->SidebarLocation->find('list'));
$this->set('sidebarlocations', $this->Sidebar->SidebarLocation->find('list'));
$this->set('locations', $this->Sidebar->SidebarLocation->find('list'));

// I have also used compact for this

但是,侧栏 add.ctp 上的选择列表未填充。这不是一个空的阵营。如果我打印它,它可以工作。

我再次使用以下代码表单。

echo $this->Form->input('sidebar_location_id', array('empty' => 'Select a Location'));

我知道问题是因为该列标题为“ sidebar_location_id ”。如果我将其重命名为“ location_id ”并将模型 SidebarLocation.php 重命名为 Location.php ,则可以正常工作但我无法执行此操作,因为有具有关联位置类型模型的多个其他模型(即:公司模型使用外键company_location_id与CompanyLocation模型相关联)。我需要这些单独的SidebarLocation和CompanyLocation模型来区分。

编辑:我想回答我可以在表单中使用的问题

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

但我希望有人知道我可以继续使用其他模型的方式

echo $this->Form->input('sidebar_location_id');

1 个答案:

答案 0 :(得分:1)

Bowlerae,

您需要通过以下方式设置控制器的值:

$sidebarLocations = $this->Sidebar->SidebarLocation->find('list');
$this->set(compact('sidebarLocations'));

在你的CTP中

echo $this->Form->input('sidebar_location_id');