下面我们说一下MVC结构的另一个特点:单一入口
单一入口指在一个网站(应用程序)中,所有的请求都是指向一个脚本文件的,例如thinkphp中的http:\\localhost\index.php,所有对应用程序的访问都是必须通过这个入口,正是单一入口才使得MVC模式得以实现,因为当你访问index.php的时候,应用程序会做大量的初始化工作,调用大量的基础类库,并根据index.php后面的参数加载控制器,然后加载试图,模型等内容信息。
thinkphp的所有文件加载都要经过控制器调用,因为控制器是thinkphp中的超类,也就是其他的类都依附于它,所以用单一入口方式访问thinkphp应用程序的时候,需要在index.php的后面加上控制器名和控制器中的方法名,如果你对于此没有任何概念或者无法理解,可以去thinkphp的官方网站下载它的官方文档,然后详细了解它的工作方式
上一节课,我们封装的MVC框架,目的是弄清楚MVC的基本原理,没有什么使用价值。接下来,我们要封装的MVC,具备了初步的使用价值。当然,代码也会复杂很多。
首先,我们要写一个MVC的入口文件index.php,它一般放在public目录中。可以把web服务器的网上的根目录定位在public,这样可以防止黑客的简单攻击。
看一下MVC结构的目录分布:
<?php
//入口文件:index.php
//检测php版本
if(version_compare(PHP_VERSION, '5.6.0','<')) die('require PHP > 5.6.0 !');
// 应用目录为当前目录
define('APP_PATH', __DIR__ . '/../');
// 开启调试模式,这里只是定义了一个常量,真正开启调试模式是在fastphp.php中
define('APP_DEBUG', true);
// 加载框架文件
require(__DIR__ . '/../fastphp/Fastphp.php');
// 加载配置文件
$config = require(__DIR__ . '/../config/config.php');
// 实例化框架类
(new fastphp\Fastphp($config))->run();
上面的入口文件,代码很简单。但所有的url请求都会执行index.php,它就是通过网站内部的“大门”,并且是唯一的。