封装框架(六)加载控制器

来源:互联网 发布:java中set集合的用法 编辑:程序博客网 时间:2024/05/29 10:11

接下来我们要建我们的控制器

首先我们在根目录下建一个目录叫app  在app下建一个目录叫controllers用来存放我们的控制器

再建一个控制器叫IndexController.php

<?phpnamespace app\controllers;class IndexController{    public function index()
    {        echo 'This is index';    }}
然后在核心文件core.php中实例话这个控制器

<?phpnamespace core;use core\lib\route;class core{    //防止重复引用类    public static $classMap = array();    static public function run()    {        $route = new route();//实例化路有类        $controller = $route->ctrl;//获取控制器名        $action     = $route->action;//获取方法名        $ctrlfile = APP.'/controllers/'.ucfirst($controller).'Controller.php';//控制器文件路径        $ctrlClass = '\\'.MODULE.'\controllers\\'.ucfirst($controller).'Controller';        if(is_file($ctrlfile)){//验证这个文件是否存在            include $ctrlfile;//包含控制器文件            $ctrl = new $ctrlClass();//实例化控制器            $ctrl->$action();//调用方法        } else {            throw new \Exception('找不到控制器'.$ctrlfile);        }    }    //自动加载类库    static public function load($class)    {        //echo 123;        //判断$classMap中是否有这个类        if(isset($classMap[$class])){            return true;        } else {            $class = str_replace('\\','/',$class);            $file = PATH.'/'.$class.'.php';            //判断这个文件是否存在            if(is_file($file)) {                include $file;                //如果引入成功的话,就放到$classMap数组中                self::$classMap[$class] = $class;            } else {                return false;            }        }    }}
在index.php中定义一个常量MODULE

<?php/** * 入口文件 * 1、定义常量 * 2、加载函数库 * 3、启动框架 */define('PATH',getcwd());//获取当前框架所在的目录define('CORE',PATH.'/core');//框架核心文件所在的目录define('APP',PATH.'/app');//项目文件目录:控制器、模型等等define('MODULE','app');//项目文件目录:控制器、模型等等define('DEBUG',true);//是否开启调试模式if(DEBUG) {    ini_set('display_error','On');}else{    ini_set('display_error','Off');}include CORE.'/common/function.php';//加载函数库include CORE.'/core.php';//加载核心文件spl_autoload_register('\core\core::load');//当我们new的类不存在的时候它会出发这个load方法\core\core::run();

0 0
原创粉丝点击