如何设计控制器,组件,视图和助手之间的关系

问题描述:

我在软件设计方面遇到了麻烦。我想设计Controller,Component,View和Helper之间的关系。我有这些型号AricleProductList。并且在ArticleProduct的内容中有以[LIST=1]的形式的列表标签。如何设计控制器,组件,视图和助手之间的关系

所以我想渲染这些列表并将它们插入到内容中以代替标记。我认为这个好主意应该是ListRendererHelper,它可以像$this->ListRenderer->renderList($listId)那样呈现View之内的列表。如果我在数据库中列出id,这将是一个好主意,但是我应该从内容中获得它。这不是用View内部的对象操作的好习惯,也不会在View中插入很多PHP代码。

所以我认为操纵内容的最佳地点是Controller,并且在这里获得列表ID。但我不应该在Controller中使用Helper,所以我认为我应该为Controller制作Component。这是我的问题,因为我将不得不在ComponentHelper中写两次渲染代码,这是违反DRY的。其他解决方案是在Component内部调用Helper,但这也是MVC中断。所以任何人都有一个想法如何设计它?

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

你想要一个模型方法来获取你的数据或操纵数据。所有的数据读取和处理都应该在模型层中进行。

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

控制器只是将数据传递给视图。控制器应该始终尽可能的苗条。

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

在视图内部使用帮助器进行循环视图逻辑。如果您需要渲染HTML的大块,可以更好地使用元素或从帮助器中调用该元素。

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

这是不特定的CakePHP,你不会有从受益任何框架,如果你不能应用像MVC的基本概念给他们。

+0

我知道这些原则,但我很困惑。我可以在另一个模型中使用不相关的模型吗? – 2014-08-30 18:30:04

+0

什么是最好的方式来呈现帮助器内的元素()? – 2014-08-30 18:42:44

+0

ClassRegistry :: init()加载另一个模型。通过在助手中使用视图类:$ this - > _ View-> element()如果你知道为什么要求在组件中使用helper等MVC违规的原则? – burzum 2014-08-30 18:53:57