动态添加表单字段

时间:2014-04-29 13:57:22

标签: php cakephp

我在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

1 个答案:

答案 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生成的字段。另外,请确保验证您列出的非常严格的输入,以避免添加您不想要的内容。如果您尚未使用安全组件,则应使用安全组件。