【问题标题】:What's the correct architecture in MVC and codeigniter?MVC 和 codeigniter 中的正确架构是什么?
【发布时间】:2013-03-17 21:21:05
【问题描述】:

我知道这种类型的问题被问了很多,我自己也问过一次这个问题,但是似乎没有答案适合我的问题。我认为,通过采用“一般”方法而不是具体方法,对自己和他人都会更有帮助。

经常被问到诸如“从视图加载控制器”“从控制器加载控制器”“从另一个视图加载带有控制器的视图”之类的问题,而到目前为止我得出的结论是,并不是没有办法这样做(我自己找到了解决方案)这是一个糟糕的架构问题。

那么,我的问题是,什么是好的架构?

如果您想加载不同的视图并帮助您组织,模板方法很有用。那太棒了。我认为问题是这样的:

-模型1,控制器1,视图1

-模型2,控制器2,视图2

-view3

-view4

您可以找到一种在视图 1 或 2 中加载视图 3 和 4 的方法。但是当您想在视图 1 中加载视图 2 时会发生什么?无法在其中包含 controller2。

我不是在问一种包含它的方式,我是在问正确的做法是什么?我已经看到了很多“重用模型”的答案。但我不太明白那是什么意思。

我认为回答这个问题并不能解决我目前遇到的问题(因为项目太先进了,我不得不重做),但它会帮助我在未来的项目中从一开始就做好。

感谢您的帮助。

【问题讨论】:

    标签: php codeigniter architecture


    【解决方案1】:

    我喜欢保持简单...

    模型与我的数据库或其他数据源交互。这就是他们所做的一切。它们将数据作为输入并返回数据。

    控制器充当请求端点并控制应用程序流/条件。他们获得正确的数据(来自模型),验证数据(来自用户),决定做什么。然后,他们使用正确的数据加载正确的视图。

    视图只是显示控制器交给它们的任何数据的 HTML 模板。在我看来,唯一的“处理”是遍历数组以生成可重复元素、格式化和有条件地显示元素/数据。

    我能想到的唯一真实实例是一个视图在其中加载另一个视图,例如导航元素或其他在多个(但不是所有)页面上重复的常见 HTML 元素。

    【讨论】:

    • 嗯,例如,我有一个“搜索框”。我可以轻松地将搜索框的 html 包含在我的索引页面中,并且问题解决了,无需创建新视图。但是,如果我想在网站的其他部分包含相同的搜索框怎么办?我必须复制代码并再次包含它。这就是为什么我创建了一个单独的视图,希望我能找到一种方法将它包含在其他视图中。我能够做到,但它违背了整个 MVC 模式。 (搜索框视图有自己的控制器)。在这种情况下,正确的做法是什么?
    • “搜索框视图有自己的控制器”是什么意思?视图没有“有”控制器....在使用搜索框的视图中,键入: $this->load->view('path/search_box');这将包括另一个视图中的搜索框视图。
    • 我说错了,对不起。我的意思是搜索框有一个单独的控制器。因此,当我这样做时,视图会显示,但搜索框中的选项不会加载,因为使其工作的所有功能都在不同的控制器中,并且出现错误。它不必只是一个搜索框,如果我有一个从自己的控制器加载数据的视图,我也会遇到同样的问题。也许答案是首先不创建新控制器?但这将导致必须在我想要包含该视图的每个控制器中重复功能。
    • 你可能想看看 HMVC...net.tutsplus.com/tutorials/php/…
    • 哦,我会的!谢谢。我会在我尝试后标记你的答案:) 我也想看看是否有其他解决方案。
    【解决方案2】:

    视图的最佳实践之一是设计三个文件夹

    • 常见的
    • 内容
    • 布局

    Common : 会有很多 html 片段,例如菜单、侧边栏、页眉、页脚……等等,甚至还有一些较小的部分,例如评论框或其他任何东西

    内容:类似于常见但更多与内容相关的视图,在除常见之外的大多数网站中都很有用

    布局:此文件夹将包含您网站的可能布局,其中包含常见视图和内容视图

    这个对于更多理解MVC的意见检查这个article

    【讨论】:

    • 感谢您的回答!我确实需要更好地理解 mvc 模式,那篇文章很棒!然而 jcorry 的答案正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2023-03-10
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多