在CakePHP中嵌套表单

时间:2010-05-03 14:35:43

标签: php cakephp

我想知道CakePHP中是否有一种方法可以在表单中嵌套多个模型?

我要做的是创建一个用于创建帖子的表单,其中还包含用于添加将自动连接到的图像(单独的模型)的字段创建的帖子。

与Ruby on Rails类似的东西** accept_nested_attributes_for **。

2 个答案:

答案 0 :(得分:6)

如果我理解正确,绝对可以这样做(请参阅官方文档中的Saving Related Model Data)。假设Post hasMany ImageImage belongsTo Post,您可以通过以下方式进行设置。

在您的视图中,您将创建一个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() */
}

假设您的帖子和图像数据有效,这将保存一个新的帖子,然后同时保存两个图像,并自动将新的图像记录与新的帖子记录相关联。

答案 1 :(得分:0)

我很确定没有CakePHP兼容的方法来做到这一点。我建议您只写一个 big 表单并在请求后解析控制器中的内容...