04mvc框架原理(8days)01

面向对象关键字:

class

public,protected,private

static

const

?

self,parent,static

?

extends

implements

abstract

interface

final

?

new

clone

?

$this

?

?

介绍项目开发

安装ecshop

解压压缩包后,获取其中upload子目录的所有文件,将其放置到可以被浏览器请求到某个目录(建议改名)

请求,index.php即可!

会自动跳转到安装页面(或者可以请求install/index.php)

?

配置php

ecshop需要mysql扩展与gd扩展(图片处理扩展)支持!



配置系统

配置数据库信息

配置ecshop管理员的信息

?

其他配置:

建议安装测试数据

安装即可

?

安装成功:

前台地址:

?

后天地址:

?

?

项目的开发周期

需求分析

设计

编码设计,应该如何实现!

两大方向:

  1. 二次开发,基于已有产品,做后期自定义处理!产品,已经实现了主体业务逻辑功能代码!

商场:ecshop,ecmall,shpex,zen-cart,es-commerce

CMS,内容管理,博客,wordpress,dedecms,drupal,

论坛,discuz,phpwind

?

  1. 基于框架开发

框架,只有基础公共代码,而没有业务逻辑的产品,就是框架!

Thinkphp,YII,Zendframework,symfony,ci,fleaphp,quephp,

?

?

编码实现

?

测试,调试,修改

?

上线,生产阶段

?

维护,升级,改版

?

代码的进化流程

one,混编

嵌入式脚本语言PHP

html与php混编的编码方式

?

two,显示和逻辑相分离

?

最后,需要将显示和逻辑的结果放在一起!

需要在 php页面,将html代码 载入才可以!

?

此时的请求,一定要去请求负责逻辑的php代码:

需要在html代码中,遍历数据,将数据展示!

?

代码分工后,易于维护和管理!从管理项目的角度出发的!

?

?

模板文件

注意当前的html页面,出现:显示格式部分由html代码充当,而数据部分需要通过php来实现。数据,特指数据的展示。(数据的获得实在负责逻辑的php代码中完成)

这样的html文件,就被称之为模(mu)板文件(template)

?

限制用户访问php逻辑文件

办法多得是,典型的两种:

1,.htaccess

deny from all

利用Apache的对访问的控制,将某个目录设置成禁止访问。将所有的模板都放入到目录内!

控制该目录的访问:

注意,htaccess生效的前提是,Apache对目录开启了allowoverride :

?

?

2,将不允许用户访问的文件,包含模板文件,都放置文档根目录之外!

浏览器请求只能看到文档根目录下的文件。

?

?

three,处理数据(处理业务逻辑的代码),从php代码中分离

场景,在完成一个其他页面,在其他页面使用到了相同的功能!

出现的数据操作逻辑的代码的重复!

解决:将重复提取!

?

新增专门处理数据的php代码

?

?

?

?

在需要比赛列表时,调用该函数即可!

?

one,two,three的进化流程:

?

?

mvc项目分层,设计思想

mvc,项目的分层思想,指的是完成一个业务逻辑,需要三大部分,分别是:

  1. 具体的业务逻辑实现的部分,数据操作,称之为 M,Model,模型!
  2. 具体显示样式的实现部分,html+css+js,称之为 V,View,视图!
  3. 负责整体流程控制的部分,负责调用M和V。成为 C,Controller,控制器!

?

?

参考four的实现

项目如果是按照上面的分工方式实现的,项目就是按照 MVC的设计思想设计的!

(只是一个项目分层思想,不决定语法)

?

?

典型,mvc的实现:

用户浏览器去请求控制器

控制调用模型实现业务逻辑数据处理

控制器调用视图,利用模板将数据展示!

?

?

?

mvc==thinkphp,zend-framework

mvc思想,

mvc框架,基于mvc设计思想所实现的框架就称之为mvc框架!

?

模型的处理

模型类

业务逻辑的处理,最终都是通过操作数据库完成!

mvc分层中,典型的模型是:

每个模型,是一个对象!一个模型对象,负责完成数据库中一个表的操作!

?

此时,针对于某个表的操作,就应该被封装到相应的模型类中!

例如,操作,match表,会有如下的模型:

完成比赛列表,在获得数据时,应该通过实例化该模型类的对象,调用其获得数据的方法!

?

使用该模型类:

实例化该类对象,调用该方法:

?

反三:班级列表

一,控制器

增加一个控制器文件,并完成向 模型和视图 发出命令

?

  1. 模型

建立一个ClassModel模型类文件

并增加一个getList方法,返回所有的班级数据

  1. 增加一个视图模板

?

基础模型类

模型的公共操作的提取

增加一个模型基础类:

所有的模型都应该继承自该模型基础类:

别忘了载入Model类才可以:

?

?

因该在实例化模型对象时,就完成数据库的连接!

在基础模型类中,增加构造方法,被子类所继承。需要在构造方法中,完成数据的连接

Model.class.php

?

此时,一旦实例化就完成了连接工作

?

模型类利用MySQLDB类对象操作数据

?

此时,在基础模型类中,初始化数据库连接,其实就是实例化MysQLDB类的对象并,保存到当前的对象的$db属性上!

Model.class.php

?

具体的模型中,如果需要执行sql,就应该使用模型对象$db属性中保存的MySQLDB类对象来完成:

ClassModel.class.php

?

?

控制器的处理

场景:

增加一个班级的添加功能(删除,修改),如何完成

删除,控制器,模型,视图

控制器:

class_delete_controller.php

?

模型

在 ClassModel中则增加方法即可

?

视图

不需要!

?

?

增加模块,控制器代码的集合

?

不能是每个操作都增加一个控制器文件,那么如何管理这些操作呢?

使用模块的概念!

模块,module,类似的操作的集合,例如,班级管理模块!

?

增加班级管理模块文件:

一个模块文件,就是多个功能的集合!

此时,完成班级操作,都要请求,class_module.php这个文件!

问题是,如何判断,当前的请求应该执行哪个具体的工作?

应该在请求 该模块文件时,增加一个参数,表示当前用户浏览器想要执行的操作!

a(action),动作的!一个操作称之为一个动作!

class_module.php?a=list 列表

class_module.php?a=del 删除

?

典型的应该利用流程分支控制:

class_module.php

?

此时,在浏览器请求时:需要:

?

?

?

?

?

?

?

?

?

控制器类

将刚刚所完成一个控制器模块文件,升级成一个控制器类

?

模块内的每个功能,变成控制器模块类的一个方法:

ClassController.class.php

?

?

?

此时,需要对控制器类进行实例化,还需要确定调用哪个方法!

需要找一个额外的文件,进行classController类的实例化!

新增文件:

index.php

?

此时,我需要看到列表:

?

?

?

入口文件,index.php

由于所有的控制器都是类!

所有的请求都需要从index.php开始,因此被称之为项目的入口文件!

?

主要负责,接收到请求,并且根据请求参数,将该请求分发到某个控制器的某个具体方法动作上。 因此入口文件也被称之为:请求分发器!

?

由于功能上整体流程控制一部,也是控制器。因此也被称之为: 前端控制器

?

如果有多个控制器类,需要多个实例化控制器类的操作!

?

如何在一个文件中,完成动态的控制类实例化的工作?

类似于action动作的区别,增加请求参数,表示当前所请求的控制器类!

c,controller,表示当前所请求的控制类

例如
班级列表: index.php?c=Class&a=list

学生删除:index.php?c=Student&a=del

?

因此,需要在实例化控制器类时,需要先判断当前的c参数,再来确定:

?

?

?

注意:

一旦完成了上面规划:

要求,用户的所有请求,都要经过index.php入口文件,分发给控制器的动作再往下执行!

index.php?c=xxx&a=yyy

?

预习

框架的概念。将共用的代码提取出来!

作业

利用six版本,实现 比赛,学生,班级信息展示!

时间: 2024-10-13 06:37:56

04mvc框架原理(8days)01的相关文章

04mvc框架原理(8days)05

后台的登陆判断 后台几乎所有的动作,在执行前都需要判断是否登录! 应该在所有的后台动作之前都判断呢? 所有的后台控制器在执行时,都需要判断! ? 典型的: 增加每个平台的基础控制器! 写平台下的公共代码! ? 实现: 在后台中: app/controller/back/ 增加: BackPlatformController.class.php 所有的后台都继承自: ? ? ? 将登陆验证的功能,提取到公共位置 ? 使其在每次,得到控制器类对象时,完成对登陆的验证! 在构造方法中: 在后台的公共控

04mvc框架原理(8days)03

页面跳转 header('Location: url'); 优势:在于立即跳转! 劣势:没有办法在跳转前给出提示! ? header功能是,发送响应头信息!相应头信息,是相应信息的一部分!通知浏览器应该做哪些事情的部分!但是要求,相应头信息,要先于响应主体(相应信息的其他部分)先被发送到浏览器! 因此,无论如何也是看不到echo的提示: 甚至,上面的代码会出现语法错误! 默认在于php有个叫:输出缓冲功能,会默认缓存所有的主体输出! ? 因此,编程上建议在使用header函数时,前面不应该有任何

04mvc框架原理(8days)02

框架 实现业务逻辑的基础代码,主要包括: 一:项目的架构模式(MVC) 二:常用的公共操作代码(MySQLDB,文件上传,图片处理,分页,字符串处理,session处理) 应该将以上的代码总结出来,下次可以直接使用! ? ? 几个项目的概念 ? 项目功能: 前台:负责展示项目具体功能的平台称之为前台! 后台:负责功能管理,数据管理的平台称之为后台! ? 工作内容: 程序:负责网站的业务逻辑主体功能实现的工作,程序!(PHP,SQL,JS) 美工:负责设计页面样式!(HTML,CSS,JS) ?

04mvc框架原理(8days)04

session操作 session详细使用 session的开启 session_start(); ? 自动开启 session可以自动开启!在当前的脚本执行之前,就完成开启! 通过php的配置文件,修改即可! ? 注意,在session已经开启的情况下再开启,则会触发错误! ? 因此典型的开启session是如下的代码: ? session_start()前的输出问题 session_start前也不应该有任何的输出,因为可能会使用到响应头信息(类似于header函数) ? ? $_SESSI

04mvc框架原理(8days)06

增加验证码的工具类 工具类 framework/tool/CaptchaTool.class.php 所有关于验证码的工作:生成,验证 ? 妥善管理所使用到背景图片: 放置在 工具目录: ? ? 展示使用验证码 增加一个控制器动作 实例化该工具类,从而完成展示验证码功能! app/controller/back/AdminController.class.php captchaAction() ? 表单页面的img标签请求该动作 app/view/back/login.html ? 将该动作也设

我喜欢减肥我们来减肥吧

http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313278016/2015.01.28.html http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313282016/2015.01.28.html http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313289016/2015.01.28.html http://www.ebay.com/cln/usli

百度回家看沙发沙发是减肥了卡斯加积分卡拉是减肥

http://www.ebay.com/cln/hpryu-caw8ke/cars/158056866019/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/158445650015/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/158445674015/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/1584456790

巢哑偕倥乇椭煞谙暗逞帕俸

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求

我国第三代移动通信研究开发进展-尤肖虎200106

众所周知,数据科学是这几年才火起来的概念,而应运而生的数据科学家(data scientist)明显缺乏清晰的录取标准和工作内容.此次课程以<星际争霸II>回放文件分析为例,集中在IBM Cloud相关数据分析服务的应用.面对星际游戏爱好者希望提升技能的要求,我们使用IBM Data Science Experience中的jJupyter Notebooks来实现数据的可视化以及对数据进行深度分析,并最终存储到IBM Cloudant中.这是个介绍+动手实践的教程,参会者不仅将和讲师一起在线