background image

 编写 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

抛出一系列的警告,这样对于程序的健壮性很有帮助。