我有控制器,'产品',动作'添加'和'编辑'。
我制作了一个长格式的'add.ctp'视图。想知道我是否可以使用相同的视图来生成显示'编辑'。在edit(){}下,我需要在控制器中输入什么才能输出到'add.ctp'而不是'edit.ctp'?
感谢。
答案 0 :(得分:6)
您可以使用:
$this->render('add');
在控制器的编辑功能结束时,但我不推荐它。
更好的解决方案是使用一个小的重构器将add.ctp的内容放入一个元素(例如app / views / elements / productForm.ctp),然后使用add.ctp和edit.ctp views。
<?php echo $this->element('productForm'); ?>
这使您可以灵活地使用特定于操作的元素包装表单,并执行可能特定于该操作的任何设置。例如,在产品表单下,您可能有一组不同的操作,例如“查看产品”在添加模式下没有意义,但在编辑模式下。
@kaklon提出了一个非常好的观点,你应该在productForm元素中添加一些逻辑,以确保编辑模式正确运行:
if ($this->action == 'edit') {
echo $this->Form->input('id');
}
答案 1 :(得分:2)
Pseudocoder写了一篇非常好的文章:http://www.pseudocoder.com/archives/category/cakephp/page:4
他认为,通过使用路线完全消除添加动作,他已经进一步改善了这一点。您可能对他编写的CakePHP技巧和编辑感兴趣。黑客:http://www.pseudocoder.com/free-cakephp-book/
答案 2 :(得分:1)
是的,你可以,这是一种方法...... https://github.com/infinitas/infinitas/blob/dev/app_controller.php#L374
允许您在只有一个文件可用时使用一个文件,或者在需要不同内容时添加/编辑
答案 3 :(得分:-1)
您正在寻找elements。视图不是100%相同,因为编辑表单需要包含您要编辑的产品的ID,而添加表单没有ID ..