我有控制器'產品',包含動作'添加'和'編輯'。我可以使用相同的視圖進行不同的操作嗎?
我提出了'add.ctp'這個有很長形式的視圖。想知道是否可以使用相同的視圖來生成顯示'編輯'。在edit(){}下,我需要放置在控制器中,使其輸出到'add.ctp'而不是'edit.ctp'?
謝謝。
我有控制器'產品',包含動作'添加'和'編輯'。我可以使用相同的視圖進行不同的操作嗎?
我提出了'add.ctp'這個有很長形式的視圖。想知道是否可以使用相同的視圖來生成顯示'編輯'。在edit(){}下,我需要放置在控制器中,使其輸出到'add.ctp'而不是'edit.ctp'?
謝謝。
Pseudocoder寫上這是一個非常不錯的文章:http://www.pseudocoder.com/archives/category/cakephp/page:4
從那時起,他更是利用途徑乾脆我想消除附加動作改善這一點。你可能會感興趣的是他的CakePHP提示&黑客編譯:http://www.pseudocoder.com/free-cakephp-book/
當然可以,這是做這件事...... https://github.com/infinitas/infinitas/blob/dev/app_controller.php#L374
,使您可以使用一個文件只有一個可用時,或添加/編輯時,你需要不同的東西
你可以使用:
$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');
}
您正在尋找elements。該視圖不是100%相同的,因爲編輯表單需要包含您要編輯的產品的ID,而添加表單沒有ID ..
並且不要忘記添加<?php echo $這 - >形式 - >輸入端( 'ID'); ?> 在edit.ctp – kaklon 2011-01-24 15:34:07
你可以在表單中有一個id字段,即使它沒有「編輯」,所以也可能只是包含它並忘記if(..) – dogmatic69 2011-01-26 09:54:43