MVC框架

Unity框架——MVC框架 前言——什么是MVC框架MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面 显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于 映射传统的输入、处理和输出功能在一个逻辑的图形化用... 阅读详情

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

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

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

(链接:https://mp.youkuaiyun.com/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");

		}
	
	}
从Qt的角度看MVC框架 从Qt的角度看MVC框架最近开始看《设计模式之禅》,其中MVC框架是我最熟悉的,文中的MVC是以JAVA的代码来解释的,我对java只是略有接触也就不赘述书本里的描述和代码分析,这里就从Qt的角度来分析一下MVC框架和QTableView的代码实现。 阅读详情

相关推荐

C++ MVC模型的简单实现

关于MVC(模型-视图-控制器)是一种软件设计的模式,MVC由三个部分组成: Model View 和 Controller,其中的关系如下: 模型: 主要是为了处理数据,比如:Model可以获取数据库的数据,可以从仪表中读取仪表的数据,他受控制于Controller,当然自己有变化的时候也可以通知Controller,但是Model不能控制Controller的行为. model.h: #pragma once #include "callable.h" class Model { publ

我不是码农的博客~~~ 2544

基于Qt的C++架构实例:模型MVC在C++后端管理系统应用

基于Qt的C++架构实例:模型MVC在C++后端管理系统应用 去发现同类优质开源项目:https://gitcode.com/ 资源描述 本资源是一个完整的Qt5.9Creator工程代码,主要功能是总结一个Qt下的MVC架构。该架构主要分为控制层、UI界面层、模型层,具体的理论讲解,可以参考博主这篇博客。 架构概述 控制层 控制层负责处理业务逻辑,协调模型层和UI界面层之间的交互。它接收来自UI...

gitblog_09728的博客 477

C++ ModelViewController: MVC设计模式详解

7.1 模式总结MVC通过分层架构实现了关注点分离,在C++中可通过观察者模式高效实现组件通信。其优势在于提升代码可维护性与可扩展性,但需根据项目规模权衡复杂度。7.2 扩展模式MVVM:通过数据绑定进一步解耦视图与模型。MVP:将控制器逻辑移至Presenter,完全消除视图对模型的依赖。:结合MVC实现更严格的分层架构。附录:C++ MVC实现代码库完整项目示例:[GitHub链接](示例代码需根据实际项目补充)测试用例:[单元测试代码](验证模型、视图、控制器独立功能)

AI天才研究院 5839

[概念理解] MVC模式和C++的实现

[转]学习可以是一件很快乐的事,特别是当你发现以前所学的点点滴滴慢慢地能够串起来或者变成了一个环,这种感觉真好。这篇文章就这么来的。 从MVC架构开始说起吧。这两天系统了解了一下MVC架构的内容,主要参考于文献【1】。 MVC在这几年应该被非常多的人所熟悉了,因为相当多的web框架采用的是这套架构,此外,早在MFC横行的年代,MFC所采用的document/view架构也是MVC架构的变种。包括QT,它的model/view亦是如此。只不过它们都将MVC中的view和controller的功能整合.

prochsh的专栏 441

MVC框架知识详解

MVC框架知识详解

不迁怒,不贰过。小知识,大智慧。 3118

SpotBugs使用

spotbugs命令行参数解析

javajingling的专栏 2948

设计模式——MVC模式(C++实现)

MVC模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 1、Model(模型)- 模型代表一个存取数据的对象。它带有逻辑,在数据变化时更新控制器。 2、View(视图)- 视图代表模型包含的数据的可视化。 3、Contr...

Skynet的博客 5425

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

添加新设备(PLC)->设备和网络管理->点击PLC->看到硬件目录选择通信板->点到点->CB1241(RS485)->看到6ES7241-1CH30-1XB0选择添加,如图。指向Modbus保持寄存器数据块的指针 我这里指向了自定义的DB块数据中一个INT数组。在通信->通信处理模块->MODBUS(选择不带RTU的通信指令块)注意:接线时,TRA接485调试模块的B- TRB接调试模块的A+组态后的硬件标识符 270 对应自己组态后自动生成的。1:事务完成,且无任何错误。波特率对应自己使用的。

swmyaopeng的博客 2万+

【MVC框架】——什么是MVC框架

    学习了经典三层之后,觉得任何一种框架都不再是难的,无论怎样,都需要连接数据库、业务逻辑处理、显示。其余的无非就是给三层解耦合,解耦合越到位,这个框架就越容易被接受。       百度百科:MVC全名是Model View Controller,是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需...

Coder Yasmine 1万+

CST微波工作室端口设置保姆级教程:从波导端口到离散端口,手把手教你搞定S参数仿真

本文提供CST微波工作室端口设置的详细教程,涵盖波导端口和离散端口的选择与配置,助力工程师精准完成S参数仿真。通过微带线滤波器案例,详解端口尺寸、阻抗设置及常见问题排查,提升仿真效率与准确性。

weixin_42570296的博客 362

tcl脚本语言之file的常见用法

这些命令覆盖了从文件属性获取、修改、复制、删除、路径处理等广泛的文件操作需求。命令用于处理文件系统操作。

hzmscut的博客 5149

Unity MVC框架之见解

Unity MVC框架之见解MVC框架认识构架图案例无框架,普通逻辑代码脚本MVC框架的运用Model脚本View脚本主界面的View脚本角色View脚本主界面的Controller脚本角色Controller脚本控制主界面的显示脚本脚本控件物体的连接 MVC框架认识 MVC框架本不是用于在游戏行业产生的框架,但是其编程思想对游戏开发的影响也很大。 M: model,是模型的意思,可是模型是为何物?是我们游戏中所要操作的人物模型等等。其主要就是存储数据的一个物体。我们所见到的的软件等等,都是本身去操作一条条

m0_48554728的博客 3897

Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南)

本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。

weixin_28363123的博客 799

android开源mvc框架有哪些,android MVC 框架

前言:以前刚接触的时候,别人都讲我们用的最基础的框架就是mvc框架,就是那种将所有的代码写在一个activity。之后,我开始接触mvp框架,并且一直使用至今,导致对mvc框架的了解越来越少。最近偶然接触,并且搜了几篇文章,才了解以前写的算是一个“随机框架”,毫无章法。一、何为mvc框架?首先了解mvc是由model(模型)、view(视图)、controller(控制器)组成的。百度搜索mvc的...

weixin_39522423的博客 218

面试真题集(十六):TensorRT基础

TensorRT面试真题解析:从模型优化到推理部署 本文精选了14道TensorRT面试题,涵盖选择题、简答题和场景题,深度考察推理工程师对TensorRT核心技术的理解。内容聚焦三个关键维度: 基础概念 FP16推理中Softmax层为何需保持FP32(数值稳定性) INT8校准原理(EntropyCalibrator2的鲁棒性优势) Plugin V3接口的构建/运行分离设计 性能优化 Conv-BN-ReLU融合减少40-60%延迟的关键机制(访存优化) 动态Shape配置策略(min/opt/max

PeterPan的博客 71

学Simulink--基于新能源与储能系统的场景实例:压缩空气储能(CAES)系统热力学建模

本文介绍了使用Simulink对压缩空气储能(CAES)系统进行热力学建模的详细流程。重点讲解了系统各模块的设计方法,包括压缩机、储气装置、膨胀机和热交换器等核心组件的参数设置与计算模型。文章还提供了控制策略设计和仿真运行的具体步骤,通过建立MATLAB函数计算关键参数变化,并分析了系统性能评估指标。该建模方法可用于验证CAES系统的设计有效性,并为优化储能效率提供技术参考。全文采用模块化设计思路,为新能源与储能系统的仿真研究提供了实用案例。

xiaoheshang_123的博客 298

Unity中的MVC框架

好处1.各司其职,互不干涉 --编程思路更清晰2.有利开发中的分工 -- 多人协同开发时,同步并行3.有利于组件重用 -- 项目换皮时,功能变化小时,提高开发效率坏处1.增加了程序文件的体量 -- 脚本由一变三2.增加了结构的复杂性 --对于不清楚MVC原理的人不友好3.效率相对较低 -- 对象之间的相互跳转,始终伴随着一定开销铁打的M和V,流水的X数据和界面是必备的内容我们可以通过改变X元素来优化原本的MVC也就是改变联系和处理M(数据)和V(界面)的方式。

m0_61939767的博客 2750

姿态传感器/陀螺仪之ICM-42670-P应用原理图设计

ICM-42670-P采用LGA-14封装,尺寸为2.5x3x0.76毫米,工作电压范围为1.71V至3.6V,支持I3CSM、I2C和SPI串行通信接口。其设计目标是提供高精度、低功耗和小型化的解决方案,以满足消费类和工业应用的需求。ICM-42670-P是一款由TDK InvenSense推出的高性能六轴MEMS运动追踪传感器,集成了3轴陀螺仪和3轴加速度计,适用于多种应用场景,包括可穿戴设备、游戏控制器、无人机、AR/VR设备等。

corlin6688的博客 1205

[MVC] 常用MVC框架及之间优缺点

目录常用MVC框架及之间优缺点Spring与Spring MVC的区别Spring与Struts2的区别Spring MVC和Struts2的区别Spring MVC和jFinal的区别REFERENCES更多 常用MVC框架及之间优缺点 主要框架 Spring Spring MVC Struts2 jFinal Spring与Spring MVC的区别 spring是一个开源框架,是为了...

架构探险之道 3975

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

PHP实现简易的MVC框架

实现MVC框架没有固定的实现方法,根据框架特色和语言特点以及自己的需求进行实现即可。

光头强的博客 7141

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Unity——基于MVC的UI框架

Unity——基于MVC的UI框架 前言 今天来学习一下MVC框架思想在Unity项目中的应用 MVC框架 概念 MVC全名是Model View Controller,是模型(Model)-视图(View)-控制器(Controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个...

#的博客 7549

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

小白MVC框架讲解

MVC框架简介为什么要学习MVC?基本术语和概述MVC总结MVC使用误区 为什么要学习MVC? 软件中最核心的,最基本的东西是什么? 问题: 没有很好设计的代码,常常就会出现数据层(持久层)和业务逻辑层还有界面代码耦合(相互影响)的情况。 而MVC用来解决业务逻辑和视图之间的耦合。 基本术语和概述 MVC模式: MVC全名是Model View Controller,是模型(model)-视图(v...

weixin_42746271的博客 1201
上一篇: Smarty简单应用
下一篇: Javascript的闭包工作原理
晶球
博客等级 码龄9年 4粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值