2011-05-14 77 views
3

比方說,我有一個帖子表和一個評論表。我希望我的/ 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));?> 

什麼是錯在這裏,不會讓一個記錄要發佈到cmts表?你可以看到,因爲選擇框沒有填充任何原因的帖子ID,所以我將帖子ID硬編碼到該表單中,就像你看到的那樣。任何幫助也將不勝感激。

回答

6

當你創建一個表單,您可以明確地設置了表單的動作是使用URL參數:

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

至於郵政ID,我假設你之間有1對多關係帖子和評論。如果是這種情況,您應該只能在您的視圖中執行以下操作:echo $this->Form->input('post_id', array('type'=>'hidden'));然後,在您的查看功能中,設置$this->data['Cmt']['post_id'] = $post['Post']['id'];以使其自動填充。

0

如果你想徵求意見提交數據,這是更好地處理,在CmtsController。

在PostsController你的視圖文件是確定

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

會生成表單操作「/ autogenerated_cake_base_url/CMTS /視圖」,你處理這個你CmtsController,而不是在你的PostsController。

1

也可以用

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

因爲這將帶你到CMTS控制器和操作添加將被調用。

相關問題