mvc 从0打造自己的框架

来源:互联网 发布:数据侠客行好看吗 编辑:程序博客网 时间:2024/06/07 09:47
入口文件->定义常量->引入函数库->自动加载类->启动框架->路由解析->加载控制器->返回结果01先从入口文件开始;<pre>1:定义常量,
当前框架的根目录
核心文件在的目录
项目在的目录
define('mvc',realpath('./'));
define('core',mvc.'/core');define('app',mvc.'/app');define('MODULE','app');<pre name="code" class="html"><pre>2:加载函数库
3:启动框架
02:自动加载类
当我们new的类不存在的时候,会自动加载。
     static public function load($class)     {       if(isset($classMap[$class]))        {            return true;        }       else       {           $class=str_replace('\\','/',$class);           $file=mvc.'/'.$class.'.php';           if(is_file($file))           {               include $file;               self::$classMap['class']=$class;           }           else           {               return false;           }       }    }

使用方法:
spl_autoload_register('\core\imooc::load');

03:路由类
1:隐藏index.php
2:获取URL  参数部分
3:返回对应的控制器方法名
 if(isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI'] != '/')        {            $path=$_SERVER['REQUEST_URI'];            $patharr = explode('/',trim($path,'/'));            //p($patharr);die;            if(isset($patharr[0]))            {                $this->ctrl =$patharr[0];            }            unset($patharr[0]);            if(isset($patharr[1]))            {                $this->action =$patharr[1];                unset($patharr[1]);            }            else            {                $this->action=conf::get('ACTION','route');            }            //p($patharr);die;            //url多余部分转成get请求            //id/1            $count=count($patharr)+2;            $i=2;            while($i < $count)            {                if(isset($patharr[$i+1]))                {                    $_GET[$patharr[$i]] = $patharr[$i + 1];                }                $i = $i + 2;            }            unset($_GET['url']);            //p($_GET);        }        else        {             $this->ctrl=conf::get('CTRL','route');             $this->action=conf::get('ACTION','route');        }


04:路由解析 根据路由类返回对应的控制器方法名,来进行包含相应的控制器方法名。05:模型类
继承 \PDO来连接数据库
class model extends \PDO{    function  __construct()    {        $database = conf::all('database');        try{          parent::__construct($database['DSN'],$database['USERNAME'],$database['PASSWD']);        }        catch(\PDOException $e)        {            p($e->getMessage());        }    }}

06:视图类

用 assign ,display 两个方法;
$data="Hello World";
$title="视图文件";$this->assign('data',$data);$this->assign('title',$title);$this->display('index.html');






0 0
原创粉丝点击