【问题标题】:PHP - MVC - Fetching the viewPHP - MVC - 获取视图
【发布时间】:2010-12-25 07:00:20
【问题描述】:

大家好!

在 PHP 上下文中寻找有关 MVC 的帮助。目前,我正在构建一个小型、轻量级的 MVC 框架,以帮助加快工作中的应用程序开发。消除内联代码是一个漫长而艰难的分离过程——至少在众多项目迫在眉睫的情况下,并且一直存在使用它的诱惑。

我了解 MVC 的大部分基本要求,并且我已经开始将一些现有的单例模式的类移植到我的新框架中作为实用程序(这些主要是执行站点服务的基本“处理程序” -用于文件上传、授权、包装 PDO 数据库查询、错误打印等的类)

在阅读了大量文档后,我似乎无法理解实例化视图的最佳方法。在我旧的、低效的设计中,我会关闭 $_GET 变量以从主视图中切换输出。只是出于直觉,这似乎是完成工作的一种极其糟糕的方式。

我正在研究 CodeIgniter,似乎在该框架内有用于加载视图的预定义函数。这种应用程序设计的最佳方法是什么?它会是一个基于类的“链接工厂”,它使用相同的变量来获取内容、选择正确的视图文件并将其放置在页面流中吗?此外,如何在不使用开关的情况下将新视图包含在根索引中的页眉和页脚之间?这是唯一让我感到困惑的事情——我真的希望我的措辞足够清楚。

一如既往地感谢大家!

【问题讨论】:

  • 如果您不是将其用于业余项目而是用于工作,为什么还要自己构建 MVC 框架?那里有几个很棒的 PHP MVC 框架,它们经过深思熟虑,非常成熟且有据可查。为什么要从头开始重新发明轮子?
  • 一个很好的观点。主要是我有兴趣这样做是为了更好地理解方法本身并扩展我自己在编写代码方面的多功能性。我也有兴趣自己扩展程序以获得它可能需要的任何功能,以使其尽可能轻量级。但主要是我的兴趣是学术性的。我有一个非常大的项目,有一段时间我第一次可以单独专注,我想尽可能从头开始构建它。
  • 如果你没有什么经验,不要在做“大型工作项目”时开始尝试。使用现有的成熟解决方案。如前所述,Codeigniter 是一个不错的选择。
  • Codeigniter 一个非常好的选择。
  • 我被 CodeIgniter 所吸引,因为它似乎是最透明的框架,面向熟悉 php 核心功能的开发人员。

标签: php model-view-controller oop


【解决方案1】:

虽然我建议使用成熟的、灵活的框架(如 Zend)来回答您的问题,但这里是我所看到的所涉及的步骤(请理解我不久前停止尝试编写这种东西,这个是基于我对我使用的现有框架的理解)。

  1. 某种路由器解析请求并转换为带有动作(或采用默认值)和可选参数的控制器对象。然后路由器调用与该动作匹配的控制器对象的函数。
  2. controller 对象(通常从通用控制器对象扩展而来)处理请求并确定要传递给视图的数据以及要使用的视图。大多数框架会根据操作设置默认视图,但最终由控制器决定使用什么视图。
  3. 视图获取数据并显示。

这是我对这个过程的非常简化的看法。

【讨论】:

  • 感谢您的意见 - 我刚刚购买了上面建议的 PDF 版书籍 - 在您的解释和您的解释之间,我想我开始看到我的理解中缺少什么。
  • @TimothyCoetzee 我不会反对你。
  • @TimLytle 你看起来很精通 PHP 和 MVC 你介意看看这个问题stackoverflow.com/questions/43313201/…
【解决方案2】:

我强烈推荐 Matt Zandstra 的“PHP 对象、模式和实践”。这本书有很多内容涉及创建 MVC 框架,对您非常非常有帮助。

它涵盖了这些模式(您也可以在其他地方研究):

  • 前置控制器
  • 应用控制器
  • 页面控制器
  • 模板视图
  • 查看助手

【讨论】:

  • 会调查的。谢谢斯科特!
猜你喜欢
  • 2015-11-11
  • 1970-01-01
  • 2015-05-16
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多