编写 PHP 的 Framework 教程(二)
实际上要自己实现一个
MVC 的应用也不难,我们知道 MVC 里面所有内容都必须经过控制
器,所以如何把控制权交给控制器呢?
我们需要一个入口文件,入口文件负责将传递的请求交给对应的控制器,实际上也就
是完成路由的功能。
为了学习的需要,可以将路由的功能简化,用户通过 GET 方式将控制器的名和 Action
的名传递过来,入口文件接收到所有参数之后,按照之前约定的规则
include 某一个文件,
然后实例化这个类,再调用这个类的相应方法。
01 <?php
02 $controller = empty($_GET['c']) ? 'Index' : trim($_GET['c']); //设置了默认的控制器
03 $action = empty($_GET['a']) ? 'index' : trim($_GET['a']); //设置了默认的 Action
04 $controllerBasePath = dirname(__FILE__) . '/modules/controllers/';
05 $controllerFilePath = $controllerBasePath . $controller . 'Controller.php';
06 if(is_file($controllerFilePath)) {
07 include $controllerFilePath;
08 $controllerName = $controller . 'Controller';
09 if(class_exists($controllerName)) {
10 $controllerHandler = new $controllerName();
11 if(method_exists($controllerHandler,$action)) {
12 $controllerHandler->$action();
13 } else {
14 echo 'the method does not exists';
15 }
16 } else {
17 echo 'the class does not exists';
18 }
19 } else {
20 echo 'controller not exists';
21 }
看着代码行数还是挺多的哦,实际上实现的功能比较简单,就是通过接受通过 GET 方
式传递的控制器名和
Action 名,如果没有传递,那么调用默认的控制器名或者 Action 名,
当用户传递了控制器名和
Action 名之后可能会存在这样一个问题,就是通过我们之前约定
的规则找不到相应的文件或者类或者方法,那么我们需要显示友好的信息,而不是让
PHP
抛出一系列的警告,这样对于程序的健壮性很有帮助。