用 Composer构建自己的 PHP 框架之设计 MVC
几乎所有人通过框架学习MVC模式,对框架运用娴熟后,往往缺乏独立设计和应用MVC架构的能力。实际上,MVC的原理并不复杂,只是需要通过适当的方式去理解和实践。
回顾
在之前的教程中,我们使用codingbean/macaw这个Composer包构建了两个简单的路由。路由是PHP框架的核心,有了它,几乎就有了整个框架的骨架。接下来,我们要让MFFC框架更加规范、丰富。
一个完善的PHP框架需要确立开发规范以便于多人协作,使用ORM、模板引擎等工具以提高开发效率。
开始规划文件夹结构
我们在MFFC/app文件夹下创建controllers、models、views三个文件夹,正式开始MVC的旅程。
(有人说我模仿了Laravel,其实我模仿的是Rails的精神。)
使用命名空间
我们新建controllers/BaseController.php文件,定义BaseController类。然后新建controllers/HomeController.php文件,定义HomeController类,并创建一个home方法,用于输出一个简单的提示。
我们增加一条路由Macaw::get('', 'HomeController@home');,然后尝试通过浏览器访问 'HomeController' not found。这是因为我们没有设置自动加载机制。
修改composer.json文件,添加自动加载的类映射路径"app/controllers"和"app/models",然后运行composer dump-autoload命令。稍等片刻后再次刷新页面,你将看到"控制器成功!"的提示。
恭喜你,你已经成功使用了命名空间!接下来,我们可以在controllers、models、views中继续完善MFFC框架,逐步构建出功能丰富、结构清晰的MVC架构。通过不断的学习和实践,你将深入理解MVC的原理,并能够独立完成MVC架构的设计和实现。连接数据库:MVC之旅的第一步
当我们开始一个新的MVC项目时,连接数据库是第一步。在PHP中,我们可以使用MySQL数据库来存储和检索数据。让我们一步步地实现这个过程。
在models目录下新建Article.php文件,文件内容如下(请自行更改数据库密码):
Article Model
class Article {
public static function first() {
$connection = mysql_connect("localhost","root","password"); // 连接数据库
if (!$connection) {
die('Could not connect: ' . mysql_error()); // 如果连接失败,输出错误信息并终止程序运行
}
mysql_set_charset("UTF8", $connection); // 设置字符集为UTF-8,确保支持中文等字符
mysql_select_db("mffc", $connection); // 选择数据库mffc
$result = mysql_query("SELECT FROM articles limit 0,1"); // 查询articles表中的第一条记录
if ($row = mysql_fetch_array($result)) { // 如果查询结果不为空,则输出标题和内容
echo '
'.$row["title"].'
';echo '
'.$row["content"].'
';}
mysql_close($connection); // 关闭数据库连接
}
}
?>
接下来,我们需要在controllers目录下的HomeController.php文件中调用这个模型。打开该文件并添加以下代码:
\HomeController\class HomeController extends BaseController {
public function home() {
Article::first();
}
}
DROP TABLE IF EXISTS articles; CREATE TABLE articles ( id int(11) unsigned NOT NULL AUTO_INCREMENT, title varchar(255) DEFAULT NULL, content longtext, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8; LOCK TABLES articles WRITE; INSERT INTO articles (id, title, content) VALUES (NULL,'我是标题','
我是内容呀~~
我真的是内容,不信算了,哼~ O(∩_∩)O
', NULL,'我是标题','我是内容呀~~
我真的是内容,不信算了,哼~ O(∩_∩)O
'); UNLOCK TABLES;刷新页面!你将看到从数据库中获取的文章标题和内容显示出来。恭喜你!你已经成功实现了MVC中的M(模型)和C(控制器)部分。接下来,我们将开始调用V(视图)部分,进一步完善我们的MVC应用。视图调用与MVC架构的理解在PHP开发中,对MVC(Model-View-Controller)架构的深入理解和实践是至关重要的。近日,我对MVC的理解有了更深一层的领悟,想要分享给大家。在此之前,我们先来了解一下关于文章模型的修改。
在`models/Article.php`中,我们定义了`Article`类,其中的`first()`方法用于从数据库中获取第一条文章记录。这个方法通过连接数据库、选择数据库、执行查询语句等步骤来获取数据,并将结果返回。这是一个典型的Model层的功能,负责与数据的交互。
接下来,在`HomeController`中,我们调用了这个`first()`方法,获取文章数据,并将数据传递给视图进行展示。这个过程体现了MVC的分离思想,Controller作为桥梁,连接Model和View,传递数据。
保存并刷新页面,视图成功调用并展示了文章数据。这是一个简单的MVC运行实例,通过它我们可以深入理解MVC的工作原理。
对于学习MVC的开发者,很多人可能是通过学习和使用某个框架开始的。这样可能会让我们对框架产生依赖,离开框架后难以独立编写简单的页面。但其实,MVC的原理并不复杂。
无论使用多么高级的PHP框架,都要遵循PHP的运行原理和基本哲学。框架只是帮助我们更高效地实现MVC的架构模式,但核心的代码逻辑和PHP的基本语法还是要我们自己去掌握。
一个PHP网站和一个简单的php test.php脚本在逻辑上是没有区别的。它们都是将一段字符串作为参数传递给PHP解释器来运行。复杂的网站会根据URL来调用不同的文件和代码,返回相应的结果。
无论是简单的框架还是复杂的大型框架,它们都会在每一个URL的驱动下,组装一段可以运行的字符串给PHP解释器。解释器返回的字符串再传给访客的浏览器。这就是一个典型的MVC工作流程。
MVC架构并不是为了某个特定的技术或框架而诞生的,它的本质是为了解决大型软件的逻辑组织问题。在GUI软件出现之前,MVC架构就已经存在并广泛应用于各种场景中。命令行输出也是一种视图的表现形式。
在MFFC(假设是一个PHP的MVC框架)中,一个URL驱动的工作流程大致是这样的:入口文件require控制器文件,控制器文件require模型文件,模型与数据库交互获取数据并返回给控制器。控制器再将数据填充到视图中,最后返回给访客。这个过程清晰明了,体现了MVC的分离思想。
理解MVC的原理并不仅仅是为了使用某个框架,更是为了让我们能够设计出更清晰、更易于维护的软件架构。
微信营销
- 用 Composer构建自己的 PHP 框架之设计 MVC
- javaScript知识点总结(必看篇)
- Javascript 是你的高阶函数(高级应用)
- php注册登录系统简化版
- 基于webpack.config.js 参数详解
- 已有打开的与此命令相关联的DataReader,必须首先将
- Mysql两表联合查询的四种情况总结
- 教你怎么用JSP统计网站访问人数
- echarts整合多个类似option的方法实例
- 图片懒加载imgLazyLoading.js使用详解
- MySQL的InnoDB扩容及ibdata1文件瘦身方案完全解析
- PHP的cookie与session原理及用法详解
- PHP判断密码强度的方法详解
- javascript匀速动画和缓冲动画详解
- PHP实现文件上传操作和封装
- 基于HTML5 Ajax文件上传进度条如何实现(jquery版本