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 ImageImage 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 中的嵌套表单的主要内容,如果未能解决你的问题,请参考以下文章

如何显示嵌套关联值 cakephp 3

Mat Table 中的嵌套反应表单找不到控件

MS Access,嵌套在表单中的格式化子报表

cakephp form helper(select)optgroup嵌套选项数组问题

html中的表单中怎么嵌套表格

CakePHP回调函数如何知道$ q是一个Query对象,哪个表执行查询?