Вложенные формы в CakePHP - PullRequest
0 голосов
/ 03 мая 2010

Мне интересно, есть ли способ в CakePHP вкладывать несколько моделей в форму?

Я пытаюсь создать форму для создания сообщений , которая также будет содержать поля для добавления изображений (отдельная модель), которые будут автоматически подключаться к созданному почта.

Что-то похожее на Ruby on Rails ** accept_nested_attributes_for **.

Ответы [ 2 ]

6 голосов
/ 03 мая 2010

Если я вас правильно понял, это абсолютно возможно (см .: Сохранение данных по связанной модели в официальной документации). Предполагая 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() */
}

Если данные вашего сообщения и изображения будут подтверждены, это сохранит новое сообщение, затем сохранит два изображения, одновременно и автоматически связав новые записи изображений с новой записью сообщения.

0 голосов
/ 03 мая 2010

Я совершенно уверен, что CakePHP-совместимого способа сделать это не существует. Я предлагаю вам написать только одну большую форму и проанализировать содержимое в контроллере после запроса ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...