我可以针对不同的操作使用相同的视图吗?

时间:2011-01-24 11:32:24

标签: php model-view-controller cakephp cakephp-1.3

我有控制器,'产品',动作'添加'和'编辑'。

我制作了一个长格式的'add.ctp'视图。想知道我是否可以使用相同的视图来生成显示'编辑'。在edit(){}下,我需要在控制器中输入什么才能输出到'add.ctp'而不是'edit.ctp'?

感谢。

4 个答案:

答案 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 ..