我在控制器中保存HABTM数据时遇到问题。
我有一个Article
模型,它与Event
模型相关联,因为文章可能与我的应用程序中的特定事件有关。我已经阅读了saving HABTM data上的CakePHP食谱条目,所以要了解它在控制器级别上是如何工作的,但是很难理解它在视图方面的外观。
我在表单中的内容是文章数据的输入(标题,摘录,内容等)。然后我想要数据库中每个事件的复选框,然后我可以检查将文章与相应的事件相关联。
通常,我会有一个像这样的复选框:
<input type="checkbox" name="event[]" value="1" />
其中1
是场地的ID,并为我的数据库中的每个事件做一个这样的复选框,但这似乎不适用于CakePHP。
在创建$this->Form->input()
复选框时,我应该为我的字段名称添加什么?什么是“CakePHP”方式?
答案 0 :(得分:1)
假设您已按Cook Book:
中所述在控制器中设置事件$this->set('events', $this->Event->find('list'));
那么你的输入应该是这样的,基本上就像Cook Book中的例子一样,multiple
option的值加checkbox
:
$this->Form->input('Event', array('multiple' => 'checkbox'));
这应该为您提供格式正确的复选框列表,其中事件displayField
为标签。
您的下一个问题可能是验证,因此请查看CakePHP HABTM data not saving to database
答案 1 :(得分:0)
我认为您保存的数据来自ArticlesController::add()
。
所以你的观点,你应该有类似下面的内容
<强> add.ctp 强>
<?php
echo $this->Form->create('Article');
echo $this->Form->input('Article.title', array('type' => 'text'));
echo $this->Form->input('Article.excerpt', array('type' => 'textarea'));
echo $this->Form->input('Article.title', array('type' => 'textarea'));
/** Generate multiple checkboxes, assumung that your array of events is $events **/
foreach($events as $index => $evt) {
echo $this->Form->input('Event'.$index.'.id', array('type' => 'checkbox', 'value' => $evt['Event']['id']));
}
echo $this->Form->submit('save');
?>
foreach
循环将创建一组看起来像这样的复选框
<input type="checkbox" name="data[Event][0][id] value="1">
<input type="checkbox" name="data[Event][1][id] value="2">
<input type="checkbox" name="data[Event][2][id] value="3">
...
可以通过$this->request->data['Event']
阵列访问发送到控制器的受尊重数据。如果您已设置关系correclty,则保存数据
已自动为您完成。
我希望这会有所帮助。