0

我在控制器中保存 HABTM 数据时遇到问题。

我有一个Article模型,它与模型相关联Event,因为文章可能与我的应用程序中的特定事件有关。我已经阅读了关于保存 HABTM 数据的 CakePHP 食谱条目,因此了解它在控制器级别上的工作原理,但很难理解它在视图方面的外观。

我在表单中输入的是文章数据(标题、摘录、内容等)。然后我想要数据库中每个事件的复选框,然后我可以检查以将文章与相应的事件相关联。

通常,我会有一个这样的复选框:

<input type="checkbox" name="event[]" value="1" />

场地的 ID在哪里1,并为我的数据库中的每个事件做一个这样的复选框,但这似乎在 CakePHP 中不起作用。

使用创建复选框时,我应该为我的字段名称输入什么$this->Form->input()?什么是“CakePHP”方式?

4

2 回答 2

1

假设您已按照Cook Book中的描述在控制器中设置事件:

$this->set('events', $this->Event->find('list'));

那么你的输入应该看起来像这样,基本上就像 Cook Book 中的示例,并添加了值为的multiple选项checkbox

$this->Form->input('Event', array('multiple' => 'checkbox'));

这应该为您提供格式正确的复选框列表,其中事件displayField作为标签。

您的下一个问题可能是验证,因此请查看CakePHP HABTM data not saved to database

于 2013-09-02T11:09:30.307 回答
0

我想您将数据从ArticlesController::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']数组访问发送到控制器的受尊重的数据。如果您已经设置了正确的关系,那么数据保存会自动为您完成。

我希望这有帮助。

于 2013-09-02T11:09:09.590 回答