CakePHP 中的嵌套表单
Posted
技术标签:
【中文标题】CakePHP 中的嵌套表单【英文标题】:Nesting forms in CakePHP 【发布时间】:2010-05-03 14:35:42 【问题描述】:我想知道 Cakephp 是否有办法在一个表单中嵌套多个模型?
我想要完成的是制作一个用于创建 Posts 的表单,该表单还将包含用于添加 Images(单独的模型)的字段,这些字段将自动连接到创建的帖子。
类似于 Ruby on Rails ** accept_nested_attributes_for** 的东西。
【问题讨论】:
【参考方案1】:如果我理解正确的话,这绝对可以做到(见官方文档中的Saving Related Model Data)。假设Post hasMany Image
和Image belongsTo Post
,您将按以下方式进行设置。
在您看来,您会像这样创建一个帖子创建表单:
<?php
$form->create("Post", array('action'=>'add','type'=>'file'));
$form->input("Post.title");
$form->input("Post.body");
$form->input("Image.0.upload", array('type'=>'file', 'label'=>__('Attach an image:',true));
$form->input("Image.1.upload", array('type'=>'file', 'label'=>__('Attach an image:',true));
?>
这定义了一个快速而肮脏的表单,它呈现 Post.title 和 Post.body 字段,以及两个新图像的两个文件附件小部件。
那么,在你的posts_controller.php
:
class PostsController extends AppController
/* stuff before PostsController::add() */
function add()
if (!empty($this->data))
if ( $this->Post->saveAll( $this->data, array('validate'=>'first')))
$this->flash(__("Post added.",true), 5);
/* Stuff after PostsController::add() */
假设您的帖子和图像数据验证,这将保存一个新帖子,然后保存两个图像,同时自动将新图像记录与新帖子记录相关联。
【讨论】:
谢谢!这正是我想要的。最好的问候【参考方案2】:我很确定没有符合 CakePHP 标准的方法来做到这一点。建议你只写一个big表单,请求后在控制器中解析内容...
【讨论】:
以上是关于CakePHP 中的嵌套表单的主要内容,如果未能解决你的问题,请参考以下文章