我在软件设计方面遇到了麻烦。我想设计Controller,Component,View和Helper之间的关系。我有这些模型Aricle
,Product
,List
。在Article
和Product
的内容中,有[LIST=1]
形式的列表标记。
所以我想渲染这些列表并将它们注入内容而不是标记。我认为好主意是ListRendererHelper
,它会像View
一样呈现$this->ListRenderer->renderList($listId)
内的列表。如果我在数据库中列出id,那将是一个好主意,但我应该从内容中获取它。使用View
内的对象操作并在View
中插入大量PHP代码并不是一种好的做法。
所以我认为操纵内容的最佳位置是Controller
,这里获取列表ID。但是我不应该在Helper
中使用Controller
,所以我认为我应该为Component
制作一个Controller
。这是我的问题,因为我必须在Component
和Helper
中写两次反对DRY的渲染代码。其他解决方案是在Helper
内调用Component
,但这也是一个MVC中断。所以任何人都知道如何设计它?
答案 0 :(得分:1)
在控制器中操作数据并在组件中呈现代码?在组件内部调用帮助器?什么......?你从哪里得到这些错误的想法?你完全理解MVC是错误的。
您需要一种模型方法来获取数据或操作数据。所有数据提取和操作都应该在模型层中进行。
MyModel::getSomeFancyData($arg1, $arg2);
MyModel::manipulateMyFancyData($data);
控制器只是将数据传递给视图。控制器应尽可能保持纤薄。
$this->set('fancyData', $this->Model->getSomeFancyData());
在视图内部使用帮助程序重复出现视图逻辑。如果你需要为HTML渲染大块,那么重复使用一个元素或从帮助器中调用该元素。
我建议你阅读有关MVC和CakePHP的基础知识:
这不是CakePHP特有的,如果您无法将MVC等基本概念应用于它们,您将无法从任何框架中受益。