实际上要本身实现一个MVC的应用也不难,咱们知道MVC里面全部内容都必须通过控制器,因此如何把控制权交给控制器呢?php
咱们须要一个入口文件,入口文件负责将传递的请求交给对应的控制器,实际上也就是完成路由的功能。html
为了学习的须要,能够将路由的功能简化,用户经过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抛出一系列的警告,这样对于程序的健壮性颇有帮助。code
当有了控制器以后,一切都变得简单了,对于模型,咱们能够把它当作是一个普通的类,只是在功能上它负责业务逻辑的处理。htm
1 <?php 2 class IndexModel { 3 public function test() { 4 return 'Hello world!'; 5 } 6 }
做为演示,咱们只是在这个模型里面返回一个Hello World,那么控制器怎么使用这个模型呢,实际上也就是首先include这个文件,而后实例化类,调用相应的方法。路由
咱们如今修改控制器为:io
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 }
如今模型有了,那么怎么链接视图呢?table
1 <html> 2 <head> 3 </head> 4 <body> 5 <p><?php if(isset($var1)) {echo $var1; } ?></p> 6 </body> 7 </html>
|
写完视图以后,怎么经过控制器调用这个视图呢?function
修改控制器至以下:class
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 } |