Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MVC中,哪一层决定将哪些(动态)数据加载到模型中?_Php_Design Patterns_Model View Controller - Fatal编程技术网

Php 在MVC中,哪一层决定将哪些(动态)数据加载到模型中?

Php 在MVC中,哪一层决定将哪些(动态)数据加载到模型中?,php,design-patterns,model-view-controller,Php,Design Patterns,Model View Controller,在MVC中,哪一层决定将哪些动态数据加载到模型中 在我的web应用程序中,ArticleView显示作者卡或关于撰写文章的用户的元数据。在我当前的设置中,UserModel在一个名为getCardData的函数中决定从数据库中为作者卡提取哪些数据: 我不确定这是否是错误的,也许这个函数应该放在视图中?还是控制器 对我来说,更模糊的是一个动态类别归档页面,其中包含一系列文章。试图解决这个问题: CategoryController从CategoryModel获取项目ID数组 CategoryCon

在MVC中,哪一层决定将哪些动态数据加载到模型中

在我的web应用程序中,ArticleView显示作者卡或关于撰写文章的用户的元数据。在我当前的设置中,UserModel在一个名为getCardData的函数中决定从数据库中为作者卡提取哪些数据:

我不确定这是否是错误的,也许这个函数应该放在视图中?还是控制器

对我来说,更模糊的是一个动态类别归档页面,其中包含一系列文章。试图解决这个问题:

CategoryController从CategoryModel获取项目ID数组 CategoryController创建一些ArticleModels/ArticleView CategoryController告诉每个人要加载哪些数据 CategoryController呈现每个ArticleView $data=$articleView->renderCategoryPageTemplate; CategoryController将渲染数据传递给CategoryView,后者将其合并到其输出中。 不管我怎么想,我都觉得不对

注:如有必要:

我有一个Redis层,如果可能的话,我更喜欢点击它而不是DB来获取元数据 有支持动态属性的用户和文章元表,所以我不处理固定列
根据我的知识,决定什么去哪里,什么时候去,或者。。。与您的业务逻辑相关,并且尽可能独立于底层或系统,您可以将其放置在任何位置。
保持独立于底层系统或层意味着即使有一天您决定将mvc框架迁移到其他地方,您的业务逻辑也可以保持完整

为什么您认为它不正确?可能是getCardData方法的articleModel,也可能介于两者之间,但绝对不能将其放在视图或控制器中。@LozCheroneツ 我的思路是,这个方法只能从一个页面模板中调用,所以将它放在用户模型中有意义吗?如果我决定作者卡应该显示更多信息,应该由用户模型改变自己的方法吗?模型不是一个类,也没有模型这样的东西。模型本身是一个层,包含多组类。请阅读。希望我不会费心去决定什么应该去哪里以及a-1。他问这个问题的方式使得评论或回答的位置完全相同。
class UserModel {
    public function getCardData() {
       $cardFields = ['firstName', 'lastName', 'avatarChoice', 'email', 'facebookId'];
       $cardData = $this->loadDataFromPersistenceLayer($cardFields);
       return $cardData;
    }
}