【问题标题】:conceptual mvc question using framework使用框架的概念性 mvc 问题
【发布时间】:2010-12-17 21:38:14
【问题描述】:

创建用于编辑数据库记录的相当复杂的表单时,我当前正在加载控制器,将请求发送到模型以制作表单,然后从模型本身加载输出,而不是将表单发送为要插入页面的视图的 $string。

我一直纠结于我们是否应该在模型或视图中创建表单(它需要访问数据库甚至创建表单,因为它是动态的),如果它是在模型中创建的,我们应该创建它作为字符串并将其发送到视图。

我知道这里没有“完美”的答案,但我们正在努力实现标准化,以便在引入开发人员时,我们以行业标准的方式完成工作(我们仍在学习)。使用 Code Igniter 框架。

【问题讨论】:

    标签: php model-view-controller codeigniter


    【解决方案1】:

    在我看来,这里有一个完美的答案:

    模型处理事物的数据方面。显示一个表单来编辑 Model 中的数据是 UI 的职责,而 UI 则是 View 的职责。

    换句话说,模型不应该呈现它自己的形式。视图应该这样做。

    【讨论】:

    • 如果你有一个完全动态的表单(数据库决定应该出现什么字段,应该出现什么标签,样式是什么样的,等等),那么你必须使用数据库创建一个正在查看的元素。
    • 我认为任何足够复杂的视图内部都会有一些有限的逻辑。在您的情况下,我希望视图中可能有一些 if() 语句来确定要显示的字段/数据。
    • @sfrench - 我认为,除非你在谈论基本的控制结构,否则你错了。在这种情况下,我会从 ASP.NET MVC 中窃取 ViewModel 概念并将逻辑放入该对象中。
    • 您的视图应该执行简单的逻辑,例如 if 和一些简单的 for 循环。您可以将所有表单字段放入一个数组中,然后将该数组传递给视图,然后视图可以遍历该数组并显示每个字段。
    • 我不了解 CI,但在 Zend 和 Symfony 中,Form 是一个包含 Field 和 Validator 实例的对象。表单在控制器中实例化,然后传递给视图。然后,视图具有知道如何呈现/装饰附加到表单的字段对象的助手。在我看来,你应该总是做一些事情来达到这个效果(即使用装饰器和/或视图助手)而不是直接将代表 html 标记的字符串附加到模型或将它们直接分配给视图变量。
    【解决方案2】:

    不要通过确定视图不应包含任何服务器端代码来限制您的应用程序。如果要将数组传递给视图,则需要循环以将此数据输出到浏览器。通过在模型中创建字符串并将其传递给视图,您必须在模型中创建大量 HTML,而这正是视图的用途。我还没有遇到过无法避免在表单中至少使用一点 PHP 的情况,通常是将 POST 数组中的值添加到验证失败的输入表单中。

    使用对您来说似乎最干净、最明智的方法,不要自责,您就是在违反规则——在这种情况下,您不是。只要您的应用程序是安全的,并且可以使用干净、可读和可维护的代码,然后就可以使用它运行。

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 2011-09-09
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      相关资源
      最近更新 更多