如何设计Controller,Component,View和Helper之间的关系

时间:2014-08-30 17:24:32

标签: php cakephp cakephp-2.0

我在软件设计方面遇到了麻烦。我想设计Controller,Component,View和Helper之间的关系。我有这些模型AricleProductList。在ArticleProduct的内容中,有[LIST=1]形式的列表标记。

所以我想渲染这些列表并将它们注入内容而不是标记。我认为好主意是ListRendererHelper,它会像View一样呈现$this->ListRenderer->renderList($listId)内的列表。如果我在数据库中列出id,那将是一个好主意,但我应该从内容中获取它。使用View内的对象操作并在View中插入大量PHP代码并不是一种好的做法。

所以我认为操纵内容的最佳位置是Controller,这里获取列表ID。但是我不应该在Helper中使用Controller,所以我认为我应该为Component制作一个Controller。这是我的问题,因为我必须在ComponentHelper中写两次反对DRY的渲染代码。其他解决方案是在Helper内调用Component,但这也是一个MVC中断。所以任何人都知道如何设计它?

1 个答案:

答案 0 :(得分:1)

在控制器中操作数据并在组件中呈现代码?在组件内部调用帮助器?什么......?你从哪里得到这些错误的想法?你完全理解MVC是错误的。

您需要一种模型方法来获取数据或操作数据。所有数据提取和操作都应该在模型层中进行。

MyModel::getSomeFancyData($arg1, $arg2);
MyModel::manipulateMyFancyData($data);

控制器只是将数据传递给视图。控制器应尽可能保持纤薄。

$this->set('fancyData', $this->Model->getSomeFancyData());

在视图内部使用帮助程序重复出现视图逻辑。如果你需要为HTML渲染大块,那么重复使用一个元素或从帮助器中调用该元素。

我建议你阅读有关MVC和CakePHP的基础知识:

这不是CakePHP特有的,如果您无法将MVC等基本概念应用于它们,您将无法从任何框架中受益。