本篇是看了一遍后没看懂回来重看一遍后写的
控制器是做业务的
模型是做数据的
视图是用来展示数据的
数据库的操作用DAO来实现,使用PDO的二次封装实现
视图可以借助smarty模板
公告控制器处理公共业务代码
公共模型处理公共数据库操代码,整个框架自动加载
MVC自定义框架设计是按照设计思路,顺着代码的执行顺序去逐步编码的,先实现简单的,必须的逻辑代码,后期发现有新的需求,可以回头增加对应的功能(不是修改)。具体的思路按照设计的结构性来划分成多个部分
trturn在函数中使用return代表返回值,将函数结果内容返回,在文件中代表将return后跟的内容返回给文件包含处
一般开发时在文件初始化功能完成后,最重要的一件事就是将URL解析,并且找到合适的控制器以及对应的控制器方法:此时,我们就规定浏览器在服务器进行访问的时候,必须携带具体的控制器名称和相对的方法名字(如果有分组还需要分组信息)
//解析URL
private static function set_url(){
//获取前后台,控制器名字和方法名字:规定浏览器中必须带p参数,c参数和,a参数(p代表platform平台(前台,后台),c代表controller,a代表action)
$p = $_REQUEST['p']??'home'; //如果没有带参数默认前台
$c = $_REQUEST['c']??'Index'; //默认IndexController
$a = $_REQUEST['a']??'Index'; //默认Index方法
//解析只是占时的,不分发,考虑到后期还要使用,设定为常量
define('p',$p);
define('c',$c);
define('a',$a);
}
所有的类文件都在控制权,模型,核心文件夹中,所以应该定义多个类方法实现类的自动加载,但是所有文件类都有命名空间,所以要考虑到命名空间的影响,利用spl_autoload_register()方法来实现注册
//自动加载方法(自定义方法)
private static function set_autoload_function($class){
//$class 代表内存中不存在的类,如果有命名空间,那么此时带空间路径,需要取出纯类名
//取出类名
$class = basename($class); //获得纯类名
//判定对应文件夹是否存在,存在包含
$core_file = CORE_PATH.$class.'.php';
if(file_exists($core_file)) include $core_file;
//判定控制器是否存在:包括前后台
$cont_file = APP_PATH.P.'/controller/'.$class.'.php';
if(file_exists($cont_file)) include $cont_file;
//判定模型是否存在
$model_file = APP_PATH.P.'/model/'.$class.'.php';
if(file_exists($model_file)) include $model_file;
//插件加载
$vendor_files = VENDOR_PATH.$class.'.php';
if(file_exists($vendor_files)) include $vendor_files;
}
//注册自动加载
public static function set_autoload(){
//利用spl_autoload_register进行注册
spl_autoload_register(array(__CLASS__,'set_autoload_function'));
}