独立封装简单mvc框架(2)
来源:互联网 发布:女生自夸的网络句子 编辑:程序博客网 时间:2024/05/29 17:26
第一步首先编译入口文件:
<?php/** * Created by PhpStorm. * versions 1.0.0 * Date: 2017/8/1 * Time: 10:09 * By: Alemon ° *///定义项目路径defined('APP_PATH') or define("APP_PATH",__DIR__);//定义文件分隔符defined('DS') or define("DS",DIRECTORY_SEPARATOR);//是否开启错误模式defined('DEBUG') or define("DEBUG",true);//引入配置文件$config=include(APP_PATH.DS."config".DS."config.php");//引入核心框架include(APP_PATH.DS.'framework'.DS.'Appliaction.php');//运行核心框架(new framework\app\Appliaction($config))->run();?>
此时只有入口文件还是不行的,所以我们需要写一个核心框架,然后去运行它
|-framework 框架核心目录
|-base 框架核心文件
|-Controller.php 控制器基类
|-Db.php Db类
|-Model.php 模块基类
|-View.php 视图基类
|-route
|-route.php 路由规则
|-Appliaction.php 框架核心类
我们会通过这些基类去实现控制器、模块、视图各个部分
Application.php代码:
<?php/** * Created by PhpStorm. * versions 1.0.0 * Date: 2017/8/1 * Time: 10:32 * By: Alemon ° */namespace framework\app;use framework\route\route;header("content-type:text/html;charset=utf-8");class Appliaction { public $config; public function __construct($config){ $this->config=$config; } public function run(){ spl_autoload_register(array($this,'load')); $this->checkdebug(); //模式 $this->setdefault(); //默认配置 $this->route(); //路由规则 } /** * 默认参数写入 */ public function setdefault(){ \framework\route\route::$defaultController=$this->config['defaultController']; \framework\route\route::$defaultAction=$this->config['defaultAction']; \framework\base\Model::$dbconfig=$this->config['db']; } //路由规则 并 实现方法 public function route(){ $route=new route(); $url1=$_SERVER['REQUEST_URI']; //重写规则 $url2=$_SERVER['SCRIPT_NAME']; //入口文件 $url=$_SERVER['QUERY_STRING']; //普通规则和兼容规则 if(empty($url)){ $url=str_replace($url2,"",$url1); $params=$route->rewrite($url); }else{ $params=$route->normal($url); } //拼接控制器的路径 然后去实现它 $controllername="\\App\\controllers\\".ucfirst($params['controller'])."Controller"; if(class_exists($controllername)){ //检测类是否存在 $actionname=$params['action']; $obj=new $controllername($params['controller'],$actionname,$params['params']); //实力换类 if(method_exists($obj,$actionname)){ //检测类里的某个方法是否存在 $obj->$actionname(); //执行这个方法 }else{ die("方法不存在!"); } }else{ die("控制器不存在!"); } } /** * @param $className 类的自动加载 */ public function load($className){ $filename=APP_PATH.DS.$className.".php"; if(is_file($filename)){ include($filename); } } /** * checkdebug() 配置错误模式 * true 为开启 false为关闭 */ public function checkdebug(){ if(DEBUG){ ini_set('display_errors','On');//开启 error_reporting(E_ALL);//E_ALL 所有的错误 }else{ error_reporting(E_ALL); ini_set('display_errors','Off'); //关闭 ini_set('log_errors','On'); //开启错误日志 ini_set("error_log",APP_PATH."/runtime/error_log.log"); //配置错误日志的路径 } }}
route/route.php 路由规则:
<?php/** * Created by PhpStorm. * versions 1.0.0 * Date: 2017/8/1 * Time: 19:48 * By: Alemon ° */namespace framework\route;header("content-type:text/html;charset=utf-8");class route { public static $defaultController=''; public static $defaultAction=''; //重写模式的路由规则 public function rewrite($url){ $url=trim($url,"/"); $uri=explode("/",$url); $arr=[]; $params=[]; if(empty($uri[0])){ $arr['controller']=self::$defaultController; $arr['action']=self::$defaultAction; }else if(count($uri)<2){ $arr['controller']=$uri[0]; $arr['action']=self::$defaultAction; }else{ $arr['controller']=$uri[0]; $arr['action']=$uri[1]; unset($uri[0]); unset($uri[1]); for($i=2;$i<=count($uri)+1;$i++){ if($i%2==0){ @$params[$uri[$i]]=$uri[$i+1]; } } $arr['params']=$params; } return $arr; } //普通规则和 兼容规则 public function normal($url){ $arr=[]; if(isset($_GET['c'])){ $url=str_replace(['c=','a=','&'],['','','/'],$url); $arr=$this->rewrite($url);// if(isset($_GET['c']) && !empty($_GET['c'])){// if(isset($_GET['a']) && !empty($_GET['a'])){// $arr['controller']=$_GET['c'];// $arr['action']=$_GET['a'];// }else{// $arr['controller']=$_GET['c'];// $arr['action']=self::$defaultAction;// } }elseif(isset($_GET['r'])){ $url=trim($url,"r="); $arr=$this->rewrite($url); }else{ echo "404 Not Found"; } return $arr; }}
最后看一下配置文件吧,在config/config.php:
<?php/** * Created by PhpStorm. * versions 1.0.0 * Date: 2017/8/1 * Time: 10:20 * By: Alemon ° */defined("BASE") or define("BASE",'http://www.alemon.com'); //域名return [ 'defaultController'=>'index',//默认控制器 'defaultAction'=>'index',//默认方法 //数据库配置 'db'=>[ 'host'=>'mysql',//连接数据库类型 'db_host'=>'127.0.0.1',//连接地址 'db_name'=>'test',//库名 'db_user'=>'root',//数据库用户名 'db_pwd'=>'root',//数据库密码 'db_charset'=>'utf8',//数据库编码格式 ],];
这些包含了类、模块的自动加载 以及最后的配置文件,下一节实现控制器的基类、参数问题等等
有什么不懂的或者不对的地方请指出来 多多指教 下面评论,有时间第一时间回复
阅读全文
1 0
- 独立封装简单mvc框架(2)
- 独立封装简单mvc框架(1)
- 独立封装简单mvc框架(3)
- 独立封装简单mvc框架(4)
- 简单封装自定义MVC框架
- 简单封装自定义MVC框架
- 封装简单的mvc框架
- php封装一个简单的MVC框架
- 封装mvc框架
- 封装mvc框架【二】
- 封装mvc框架
- mvc框架封装(一)
- 封装MVC框架
- 封装mvc框架【五】medoo
- 封装自己的mvc 框架
- MVC封装框架 知识点 一
- 简单的MVC封装方法
- 封装一个属于自己的mvc框架(2)
- Kubernetes存储之Persistent Volumes简介
- Intellij Idea&Android Studio中iml文件、modules.xml文件作用
- 蛇形填数
- Attention在语音识别中的应用(1)
- 阿里巴巴2016前端开发工程师笔试(二)
- 独立封装简单mvc框架(2)
- Mybatis 执行传入的sql语句
- 链表的相关面试题
- 微服务--Microservice
- 五分钟读懂SIGIR 2017前沿技术研究成果
- 模糊匹配并替换
- SQL Server DATEPART() 函数
- 深入理解JVM—JVM内存模型
- MySQL LeftJoin优化未果问题