Как отправить форму для одной модели в контроллер другого? - PullRequest
3 голосов
/ 14 мая 2011

Допустим, у меня есть таблица сообщений и таблица комментариев.Я хочу, чтобы на моей / posts / view / page была форма для отправки комментария на той же странице, как и в любом обычном блоге.Я не уверен, где я иду не так, но вот что я пробовал:

class PostsController extends AppController {
var $name = 'Posts';
var $uses = array('Post', 'Cmt'); 

function view($id = null) {
    ...
    if (!empty($this->data)) {
        $this->Cmt->create();
        if ($this->Cmt->save($this->data)) {
            $this->Session->setFlash(__('The cmt has been saved', true));
        } 
    }

    $this->set('post', $this->Post->read(null, $id));
}

и в представлении

<?php echo $this->Form->create('Cmt');?>
<fieldset>
<?php
    echo $this->Form->input('name');
    echo $this->Form->input('email');
    echo $this->Form->input('title');
    echo $this->Form->input('content');
?>
    <div class="input select required"><label for="CmtStpageId">Post</label>
        <select id="CmtPostId" name="data[Cmt][post_id]">
            <option value="1">postname</option>
        </select>
    </div>
</fieldset>
<?php echo $this->Form->end(__('Submit', true));?>

Что здесь не так, что победил 't разрешить отправку записи в таблицу cmts?

Кроме того, у меня есть жестко запрограммированный в этой форме идентификатор записи, поскольку поле выбора по какой-либо причине не заполняется идентификаторами записи.Любая помощь в этом также будет оценена.

Ответы [ 4 ]

6 голосов
/ 14 мая 2011

Когда вы создаете форму, вы можете явно указать, какое действие формы использует параметр url:

$this->Form->create('Cmt', array('url'=>$this->Html->url(array('controller'=>'cmts', 'action'=>'add'))));

Что касается идентификатора записи, я предполагаю, что у вас есть отношение 1-ко-многиммежду постами и комментариями.Если это так, вы должны просто сделать следующее в своем представлении: echo $this->Form->input('post_id', array('type'=>'hidden')); Затем в функции просмотра установите $this->data['Cmt']['post_id'] = $post['Post']['id'];, чтобы оно автоматически заполнялось.

4 голосов
/ 18 октября 2011

Я думаю, что лучше сделать это так ...

$this->Form->create('Cmt', array('url'=>array('controller'=>'cmts', 'action'=>'add')));

опция ['url'] уже обрабатывает массивы с контроллером и действием.

Вы найдетеэто здесь: http://book.cakephp.org/view/1384/Creating-Forms#options-url-1387

1 голос
/ 09 июня 2014

Можно также использовать

$this->Form->create('Cmt', array( 'action' => 'add' ));

, поскольку это приведет вас к контроллеру cmts, и будет вызвано действие add.

0 голосов
/ 09 марта 2012

Если вы хотите отправить данные для комментариев, лучше обрабатывать это в CmtsController.

Ваш файл просмотра в PostsController в порядке

<?php echo $this->Form->create('Cmt');?>

сгенерирует действие формы "/ autogenerated_cake_base_url / cmts / view", и вы обрабатываете его в CmtsController, а не в PostsController.

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