【问题标题】:The V part in an MVC model when applied to a CMS应用于 CMS 时 MVC 模型中的 V 部分
【发布时间】:2025-12-08 19:55:02
【问题描述】:

随着 CMS (PHP/MySQL) 越来越大,其代码更难维护,我正在考虑应用 MVC 模型以使其更易于维护和透明。我一直在追赶这个主题,我想我已经弄清楚了,除了视图部分。到目前为止,这是我的想法:

index => 控制器  模型
         控制器 => 视图

充当主控制器(路由器)并根据 URL 中的参数创建控制器类的实例的 index.php。控制器类与模型类对话,以更新和检索数据库中的信息。之后,控制器确保显示视图(以模板的形式)并接收处理后的数据以进行显示。不过……

想法是将所有逻辑从视图转移到控制器,对吗?或者至少远离视图——以防止胖/瘦控制器/模型讨论。但无论我怎么看,我仍然需要一些动态视图,这也需要 一些 逻辑。例如,根据用户级别和权限(更新、更新/删除等)为某些用户显示某些选项。所以这将归结为 if/else 语句和类似的东西。这个可以吗?如果是这样,这种“简单”逻辑有多少是“允许的”?我的看法是,不同的模板开始变得更有意义(例如profile_viewprofile_edit)。

另一个简单的例子。假设一个用户可以看到 10 个配置文件字段中的 5 个,而另一个用户可以看到 10/10。我是否应该通过控制器检索所有 10 个字段的所有信息,并在视图中确定是否显示它?或者将这些类型的决策也移至控制器,并检索 5 或 10 个字段的信息,并根据已传递的信息仅显示视图中的可用字段?因为在许多情况下,拥有所有数据并忽略其中一些数据要容易得多,而不是不知道可用的数据并一直检查它。

【问题讨论】:

    标签: model-view-controller


    【解决方案1】:

    “所以这将归结为 if/else 语句和类似的东西。这样可以吗?”

    是的。

    “这种‘简单’逻辑有多少是‘允许’的?”

    简单的 if-else 和简单的循环必须存在于视图模板中。

    没有计算。没有表单处理逻辑。没有。

    如果您查看一些更复杂的框架,您会看到一些示例。实际上,您可能应该只使用框架而不是自行开发。

    [如果您有耐心阅读基于 Python 的 Django template 文档,您可以看到应该允许的内容。可能有一些 PHP 框架具有类似的理念。]

    “假设一个用户可以看到 10 个配置文件字段中的 5 个,而另一个用户 10/10”

    有几种方法。

    1. 两个不同的页面模板显示相同的基础数据。你拿走一切, 但选择适合用户的模板。

    2. 一个显示变体基础数据的复杂模板。您获取所有内容,提供合适的标志,然后发送到使用模板端 if 语句的模板。

    哪个“更好”?取决于您对复杂页面的兴趣。就个人而言,我更喜欢有两个简单的页面并使用某种继承来分解出共同的特征。我不喜欢 if 语句,它们是未来出现问题的原因。 OTOH,有些人喜欢 if 语句并且不介意复杂性。

    【讨论】:

      【解决方案2】:

      在我对MVC的理解和应用中,控制器包含业务/应用程序逻辑,而视图可以包含展示性逻辑。您希望您的视图尽可能简单和具体,但您不希望在控制器中生成 HTML(例如)并仅在视图中显示。

      【讨论】:

        【解决方案3】:

        到第二个例子:不要只传递可见的所有 10 个字段,过滤控制器中的不可见元素,并尽可能保持视图简单。

        【讨论】:

          最近更新 更多