MVC框架

下面贴了一张MVC工作原理图,此图介绍了MVC的含义及其工作过流的走向

一、在分析其工作代码的原理前,我们这边准备了一下准备工作

1)warmp64下的www文件下任意建一个MVC文件夹,之前有一篇介绍Smarty内容提到的libs库复制一份放进MVC文件夹中

(链接:https://mp.csdn.net/postedit/79779952),然后文件夹内再建一个Config、Controller、Model、View文件夹目录,然后在Contoller文件夹下建UserController.php、IndexController.php、GoodsController.php文件;在View目录下也对应控制器建对应的文件夹User、Index、Goods,View这里就不再多说是放模板文件的;Model文件夹下放入写好的model.class.php类文件;Config下放入连接数据库的配置文件config.php;目录如下图:

2)config.php代码如下,自己将其建好并将其mysql数据库也建立好

     //连接数据库的配置文件
	define('HOST','自定义');
	define('USER','root');
	define('PASSWORD','自定义');
	define('DB_NAME','自定义');
	define('CHARSET','utf8');

3)准备好之前封装好的model.class.php类文件,这里暂时不分享,有点小乱,后续整理后再发布

二、正式进入

1)首先打开之前建好的入口文件index.php文件

通过get的方法接收控制器和方法===>index.php?c=users&a=add;

 // 0、引入config配置信息

include "./Config/config.php";
// 引入model类
include "./Model/model.class.php";

//1、 此处的判断是为了避免没输入c和a时页面报错,默认显示index页面
	$c = isset($_GET["c"]) ? $_GET["c"] :'Index' ;//$_GET["c"] ?? 'Index';
	$a = isset($_GET["a"]) ? $_GET["a"] :'index' ;//$_GET["a"] ?? 'Index';

// 2-1、引入控制器类文件

//include "./Controller/".$c."Controller.class.php";

// 2-2、引入控制器类文件,2-2方法更加严谨所以淘汰2-1方法,固用此法

// 自动加载函数
/*自动加载函数:当我们实例化或继承一个不存在的类的对象的时候会被自己调用,即需要传入一个变量$className当调用这个函数时,发现后面有实例化但确没有引入此实例化的类文件时,会自动加载下面这个函数,同时会生成和实例化名字一样的变量,添加到下面的调用文件的类名*/
/*因为一般文件libs里面会有很多库函数,然后库文件的名字应该类的名字是一样的,所以要在前面再加一个路径*/

function __autoload($className){
		// 判断smarty或者是其他名字的类是否存在,如果存在,就引入对应的类文件
		if(file_exists("./Libs/".$className."/".$className.".class.php")){
			include "./Libs/".$className."/".$className.".class.php";
		}elseif(file_exists("./Controller/".$className.".class.php")){
			include "./Controller/".$className.".class.php";
		}
	}

//3、 实例化控制器类
$controller =$c."Controller";
$obj = new $controller();

// 4、调用控制器类的方法
$obj->$a();

UserController.class.php=======================================

2)因为第一步输入的是c=users&a=add;所以会调到UserController.class.php下的add方法

注释1、此页面所有引入的文件都是以index为准来引入的,因为是index入口文件调用了这个控制器,即在输出的网页名后面加入然后调出add.html页面,此时add.html也是在index.php文件上

注释2、为了方便起见将此页面内的// include "./Config/config.php";include "./Model/model.class.php";全部移动东index.php入口文件内,因为是在同一界面上加载的

注释3、此页面中解析的模板add.html、edit.html均是在View目录下的新建的user目录下建的模板文件,此处可根据自己的需求创建模板文件

注释4、所以注释掉的代码均是由繁道简的过程演变,注释很详细,耐心看一下即可,就不多加赘述

class UsersController extends Smarty
	{
		// 构造方法来简化实例化的那几个初级步骤
		public function __construct(){
			// 调用一下父类的构造方法,避免和下面的构造方法冲
			parent::__construct();
			/*因为上面继承了父级的所以此处就不需要再实例化*/
			// 2、实例化smarty类
			// $this->s = new Smarty();
			
			// 3、初始化smarty
			$this->template_dir="./View";
			$this->compile_dir="./View_c";
		}
		// 展示用户列表的方法
		public function index(){
			// 1、引入Smarty类
			// include "./Libs/Smarty.class.php";
			// 2、实例化smarty类
			// $s = new Smarty();
			// // 3、初始化smarty
			// $s->template_dir="./View";
			// $s->compile_dir="./View_c";
			// 4、引入model所需要的配置文件
			// include "./Config/config.php";
			// 5、引入model类
			// include "./Model/Model.class.php";
			// 6、实例化model类
			$users = new Model('users');
			// 7、查询users表的所有信息
			$res = $users ->select();
			// var_dump($res);
			// 4、分配变量
			$this->assign('res',$res);
			// 5、解析模板
			$this->display("Users/index.html");
		}
		// 加载添加用户表单的方法
		public function add(){
			// echo "展示用户的表单";
			// 1、引入Smarty类
			// include "./Libs/Smarty.class.php";
			// 2、实例化smarty类
			// $s = new Smarty();
			// // 3、初始化smarty
			// $s->template_dir="./View";
			// $s->compile_dir="./View_c";
			// 4、分配变量
			// 5、解析模板
			$this->display("Users/add.html");//因为上边已经指定是在view目录下所以只需要加users这个路径名即可
		}
		// 执行用户添加的方法
		public function insert(){
			// 将用户信息添加到数据库当中
			// 0、引入model所需要的配置文件
			// include "./Config/config.php";
			// 1、引入model类
			// include "./Model/Model.class.php";
			// 2、将爱好信息拼接成字符串
			$_POST['hobby'] = implode(",", $_POST['hobby']);
			// 3、实例化model类
			$users = new Model('users');
			// 4、将用户信息进行添加
			$res = $users->add($_POST);
			// var_dump($res);
			// 5、判断是否成功
			if($res){
				$this->success("恭喜添加成功","./index.php?c=users&a=index",3);
			}else{
				$this->error("抱歉,添加失败",$_SERVER['HTTP_REFERER'],3);
			}
		}
		// 执行用户删除的方法
		public function delete(){
			// 引入config配置信息
			// include "./Config/config.php";
			// 引入model类
			// include "./Model/model.class.php";
			// 获取要删除的id
			$id = $_GET["id"];
			// 实例化model类,users是数据库建立的表格名称
			$users = new Model("users");
			// 执行删除
			$res = $users ->del($id);
			// 判断是否删除成功
			if($res){
				$this->success("恭喜删除成功","./index.php?c=users&a=index",3);
			}else{
				$this->error("抱歉,删除失败",$_SERVER['HTTP_REFERER'],3);
			}


		}
		// 加载修改用户表单的方法
		public function edit(){
			// 1、引入Smarty类
			// include "./Libs/Smarty.class.php";
			// 2、实例化smarty类
			// $s = new Smarty();
			// // 3、初始化smarty
			// $s->template_dir="./View";
			// $s->compile_dir="./View_c";
			// 4、引入config配置信息
			// include "./Config/config.php";
			// 5、引入model类
			// include "./Model/model.class.php";
			
			// 7、实例化model类,users是数据库建立的表格名称
			$users = new Model("users");
			// 8、获取要修改的id
			$id = $_GET["id"];
			// 9、执行修改
			$res = $users ->find($id);
			// 10、分配变量
			$this->assign("res",$res);
			// 11、解析模板
			$this->display("Users/edit.html");
		}
		// 执行用户修改的方法
		public function update(){
			// 8、获取要修改的id
			$id = $_GET["id"];
			$_POST["hobby"]=implode(",", $_POST["hobby"]);


			// // 4、引入config配置信息
			// include "./Config/config.php";
			// 5、引入model类
			// include "./Model/model.class.php";
			// 7、实例化model类,users是数据库建立的表格名称
			$users = new Model("users");
		
			// 9、执行修改
			$res = $users ->save($_POST,$id);
			// 判断是否删除成功
			if($res){
				$this->success("恭喜修改成功","./index.php?c=users&a=index",3);
			}else{
				$this->error("抱歉,修改失败",$_SERVER['HTTP_REFERER'],3);
			}
		}
		/*成功函数*/
		public function success($info,$link,$seconds){
			// 引入smarty类
			// include "./Libs/Smarty.class.php";
			// // 实例化smarty函数
			// $s = new Smarty();
			// // // 初始化参数
			// $s->template_dir = "./View";
			// $s->compile_dir = "./View_c";
			// // 分配变量
			$this->assign("info",$info);
			$this->assign("link",$link);
			$this->assign("seconds",$seconds);
			// // 解析模板
			$this->display("./success.html");


		}
		// 失败函数
		public function error($info,$link,$seconds){
			// 引入smarty类
			// include "./Libs/Smarty.class.php";
			// // 实例化smarty函数
			// $s = new Smarty();
			// // // 初始化参数
			// $s->template_dir = "./View";
			// $s->compile_dir = "./View_c";
			// // 分配变量
			$this->assign("info",$info);
			$this->assign("link",$link);
			$this->assign("seconds",$seconds);
			// // 解析模板
			$this->display("./error.html");

		}
	
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值