2011-01-24 192 views
2

我有控制器'產品',包含動作'添加'和'編輯'。我可以使用相同的視圖進行不同的操作嗎?

我提出了'add.ctp'這個有很長形式的視圖。想知道是否可以使用相同的視圖來生成顯示'編輯'。在edit(){}下,我需要放置在控制器中,使其輸出到'add.ctp'而不是'edit.ctp'?

謝謝。

回答

6

你可以使用:

$this->render('add'); 

在控制器的編輯功能的結束,但我不會推薦它。

更好的解決方案是做一個小的重構,將你的add.ctp的內容放入一個元素中(例如app/views/elements/productForm.ctp),然後從add.ctp中使用該元素和edit.ctp視圖。

<?php echo $this->element('productForm'); ?> 

這使您可以靈活地使用特定於操作的元素來封裝表單,並執行可能特定於該操作的任何設置。例如,在產品表單下,您可能有一組不同的操作,例如「查看產品」,在添加模式下無效,但在編輯模式下有效。

@kaklon取得了很好的點,你應該把邏輯的一點點進入productForm元素,以確保編輯模式正確行爲:

if ($this->action == 'edit') { 
    echo $this->Form->input('id'); 
} 
+1

並且不要忘記添加<?php echo $這 - >形式 - >輸入端( 'ID'); ?> 在edit.ctp – kaklon 2011-01-24 15:34:07

+0

你可以在表單中有一個id字段,即使它沒有「編輯」,所以也可能只是包含它並忘記if(..) – dogmatic69 2011-01-26 09:54:43

-1

您正在尋找elements。該視圖不是100%相同的,因爲編輯表單需要包含您要編輯的產品的ID,而添加表單沒有ID ..

相關問題