我在CakePHP应用程序中添加表单字段时遇到问题,我不知道如何解决它。我希望在EventsController / add.ctp中有表单,用于添加事件,我希望在其中包含字段Events.name,Dates.from,Dates.to,Dates.endregister,Dates.location_id,{optional more Dates.from,Dates.to ,...},Terms_mem.teacher_id {和可选的更多Terms_mem.teacher_id}我的表格是:
CREATE TABLE `events` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(150) NOT NULL
);
CREATE TABLE `dates` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`from` datetime NOT NULL,
`to` datetime NOT NULL,
`endregister` datetime,
`event_id` int(11) NOT NULL,
`location_id` int(11) NOT NULL,
FOREIGN KEY (`event_id`) REFERENCES `events`(`id`),
FOREIGN KEY (`location_id`) REFERENCES `locations`(`id`)
);
CREATE TABLE `locations` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`street` varchar(70),
`city` varchar(70) NOT NULL
);
CREATE TABLE `dates_mem` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`teacher_id` int(11) NOT NULL,
`date_id` int(11) NOT NULL,
FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`),
FOREIGN KEY (`date_id`) REFERENCES `dates`(`id`)
)
因此形式如下:
<?php echo $this->Form->create('Event'); ?>
<fieldset>
<?php
// events
echo $this->Form->input('name');
// dates
echo $this->Form->input('from');
echo $this->Form->input('to');
echo $this->Form->input('endregister');
echo $this->Form->input('location_id');
/* HERE optional dynamically add next inputs for dates (from, to, ...) */
// teachers
echo $this->Form->input('teacher_id');
/* HERE optional dynamically add next inputs for teachers(teacher_id) */
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
然后将所有字段保存到相应的表中。这可能在CakePHP 2.4版本中有用吗?如果是的话,你能帮帮我吗?
编辑:
burzum写道:
$this->Form->input('Date.0.from');
$this->Form->input('Date.0.to');
$this->Form->input('Date.1.from');
$this->Form->input('Date.1.to');
是否可以这样做:?因此,字段Date.1.from和Date.1。在单击按钮后动态添加到表单添加下一个日期
$this->Form->input('Date.0.from');
$this->Form->input('Date.0.to');
// button add next date
$this->Form->input('Date.1.from'); // after click on add next date
$this->Form->input('Date.1.to'); // after click on add next date
// button add next date
$this->Form->input('Date.2.from'); // after click on add next date
$this->Form->input('Date.2.to'); // after click on add next date
// button add next date
答案 0 :(得分:1)
您是否尝试阅读本手册?如果没有阅读本手册,将在#34; Saving your data&#34;部分详细说明。请参阅this part。
简而言之,首先是视图
$this->Form->input('FirstModel.field1');
$this->Form->input('SecondModel.field1');
$this->Form->input('SecondModel.field2');
$this->Form->input('Date.0.from');
$this->Form->input('Date.0.to');
$this->Form->input('Date.1.from');
$this->Form->input('Date.1.to');
// ...
控制器:
$this->saveAll($this->request->data);
是的,您可以动态添加字段,使用Javascript将其他字段注入DOM。通过JS模板或通过AJAX。只需确保您生成的表单输入遵循CakePHP约定,并列出JS生成的字段。另外,请确保验证您列出的非常严格的输入,以避免添加您不想要的内容。如果您尚未使用安全组件,则应使用安全组件。