html5中文学习网

您的位置: 首页 > 网络编程 > PHP编程 » 正文

一步步编写PHP的Framework(二)_PHP教程_编程技术

[ ] 已经帮助:人解决问题

 PbFHTML5中文学习网 - HTML5先行者学习网

  实际上要自己实现一个MVC的应用也不难,我们知道MVC里面所有内容都必须经过控制器,所以如何把控制权交给控制器呢?PbFHTML5中文学习网 - HTML5先行者学习网

       我们需要一个入口文件,入口文件负责将传递的请求交给对应的控制器,实际上也就是完成路由的功能。PbFHTML5中文学习网 - HTML5先行者学习网

       为了学习的需要,可以将路由的功能简化,用户通过GET方式将控制器的名和Action的名传递过来,入口文件接收到所有参数之后,按照之前约定的规则include某一个文件,然后实例化这个类,再调用这个类的相应方法。PbFHTML5中文学习网 - HTML5先行者学习网

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抛出一系列的警告,这样对于程序的健壮性很有帮助。PbFHTML5中文学习网 - HTML5先行者学习网

         当有了控制器之后,一切都变得简单了,对于模型,我们可以把它看成是一个普通的类,只是在功能上它负责业务逻辑的处理。PbFHTML5中文学习网 - HTML5先行者学习网

1 <?php
2 class IndexModel {
3     public function test() {
4         return 'Hello world!';
5     }
6 }

        作为演示,我们只是在这个模型里面返回一个Hello World,那么控制器怎么使用这个模型呢,实际上也就是首先include这个文件,然后实例化类,调用相应的方法。PbFHTML5中文学习网 - HTML5先行者学习网

         我们现在修改控制器为:PbFHTML5中文学习网 - HTML5先行者学习网

01 <?php
02 class IndexController {
03     public function index() {
04         $modelPath = dirname(__FILE__) . '/../models/IndexModel.php';
05         if(file_exists($modelPath)) {
06             include $modelPath;
07             $model = new IndexModel();
08             echo $model->test();
09         } else {
10             echo 'model does not exists';
11         }
12     }
13 }

   现在模型有了,那么怎么连接视图呢?PbFHTML5中文学习网 - HTML5先行者学习网

1 <html>
2     <head>
3     </head>
4     <body>
5         <p><?php if(isset($var1)) {echo $var1; } ?></p>
6     </body>
7 </html>

        写完视图之后,怎么通过控制器调用这个视图呢?PbFHTML5中文学习网 - HTML5先行者学习网

        修改控制器至如下:PbFHTML5中文学习网 - HTML5先行者学习网

01 <?php
02 class IndexController {
03     public function index() {
04         $modelPath = dirname(__FILE__) . '/../models/IndexModel.php';
05         if(file_exists($modelPath)) {
06             include $modelPath;
07             $model = new IndexModel();
08             $var1 =  $model->test();
09             $viewPath = dirname(__FILE__) . '/../views/index.php';
10             if(file_exists($viewPath)) {
11                 include $viewPath;
12             } else {
13                 echo 'view does not exists';
14             }
15         } else {
16             echo 'model does not exists';
17         }
18     }
19 }

         这样一个MVC的应用就搭起来了,虽然比较简陋,问题还多多!!!PbFHTML5中文学习网 - HTML5先行者学习网

PbFHTML5中文学习网 - HTML5先行者学习网
PbFHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助