04mvc框架原理(8days)02

框架

实现业务逻辑的基础代码,主要包括:

一:项目的架构模式(MVC)

二:常用的公共操作代码(MySQLDB,文件上传,图片处理,分页,字符串处理,session处理)

应该将以上的代码总结出来,下次可以直接使用!

?

?

几个项目的概念

?

项目功能:

前台:负责展示项目具体功能的平台称之为前台!

后台:负责功能管理,数据管理的平台称之为后台!

?

工作内容:

程序:负责网站的业务逻辑主体功能实现的工作,程序!(PHP,SQL,JS)

美工:负责设计页面样式!(HTML,CSS,JS)

?

?

由后台的数据添加(管理),前台的数据展示!

?

?

建立主机

增加独立的站点主机,管理当前的项目。通过虚拟主机完成!

?

通过 域名 shop.100.com来访问!

?

?

提取框架代码

总体项目分成:1具体业务逻辑实现+2公共的基础框架代码

?

应用程序的MVC分层

?

?

将之前所完成mvc代码,分散到上面的功能目录内:

?

增加入口文件

需要修改载入控制器文件的路径!

?

增加相应的控制文件

shop/app/controller/MatchController.class.php

完成控制器类与一个列表的动作方法:

shop/app/controller/MatchController.class.php

注意其中的模型文件路径与视图文件路径:

?

增加比赛模型文件

app/model/MatchModel.class.php

完成模型类,别忘了加载基础模型类的路径:

基础模型类,应该放在框架的基础代码:

?

增加基础模型类

framework/Model.class.php

增加相应的初始化方法:

载入了MySQLD类,修改载入路径

mysqlDB也应该放置在Framework内!

?

增加MySQLDB类文件

framework/MySQLDB.class.php

实现即可!

?

?

增加显示层模板

app/view/match_view.html

?

?

?

?

?

平台的分布,platform

前台和后台

?

平台间:业务逻辑不同但是数据应该一致的!

?

典型的就是:

模型 的概念是部分前后台的(平台)

而 控制器 和 视图 的部分 是被划分成 平台的概念!

因此:控制器:

和 视图:

?

但是,模型内,是不用划分的!

?

平台参数,p

此时需要增加一个请求参数,用于标识当前所请求的平台是哪个!

?

index.php?p=front&c=Match&a=list 访问前台的Match控制器的list动作!

index.php?p=admin&c=Goods&a=add 访问后台的Goods控制器的add动作

?

在入口文件内,增加对p参数的处理:

Index.php

?

?

最后,在控制器的动作中载入视图层模板,也需要控制平台!

app/controller/front/MatchController.class.php

?

布局总结

项目:做了三次分割:

  1. 业务逻辑与框架基础代码!(app,Framework)
  2. mvc的分割!(app/controller, app/model, app/view)
  3. 平台的分割!(app/controller/front, app/controller/admin, app/view/front,app/view/admin)

?

url:需要三个请求参数:

p:请求的平台。(目录名)

c:请求的控制器名。(控制器类名,类名首字母大写)

a:请求的动作名。(方法名)

?

?

目录结构

shop/????项目的根目录

????app/????????应用程序目录

????????controller/????控制器目录

????????????????front/????前台控制器

????????????????admin/????后台控制器

????????model/????????模型目录

????????????模型文件

????????view/????视图目录

????????????front/????前台视图

????????????admin/????后台视图

????Framework/ 框架代码目录

????????Model.class.php????基础模型类

????????MySQLDB.class.php????数据库操作类

?

?

后台登陆功能

?

登陆表单展示,login

控制器

在后台增加一个操作管理员相关功能的控制器类!

app/controller/admin/AdminController.class.php

并增加一个显示登录表单的动作:

loginAction()

模型

没有模型参与!

视图

增加一个模板,暂时表单!

app/view/admin/login.html

所有的html样式,直接参考,ecshop的成果!

需要注意的地方:

表单的请求地址:

还需要将css与image拿来:

修改路径:

?

?

?

管理员数据验证,signin

增加一个管理员表

先增加库:

再增加管理员表:

?

在开发时,可以使用 其他的客户端,做数据库的管理!

常见:

桌面形式:

mysql-front

?

navicat

?

?

web端的

phpmyadmin

php代码实现的完成数据库管理的php产品!

下载,解压,放在可以被web浏览器访问到的位置即可!

?

访问即可!

留意,phpmyadmin默认是通过使用 mysqli 扩展完成数据的操作的!(不开启也可以,使用mysql)

?

增加测试数据

?

?

?

?

控制器

app/controller/admin/AdminController.class.php

signinAction()

模型

为 it_admin表增加一个模型!

app/model/AdminModel.class.php

别忘了修改下 项目的数据库名!

framework/Model.class.php

视图

不需要视图!

?

?

?

增加自动加载类文件

增加一个__autoload函数即可!

考虑放在入口文件内:因为所有的请求都要通过入口文件!

?

此时需要考虑 类名与类所在文件的关系!

类????????????????目录

控制器类

AdminController????app/controller/admin/

模型类

AdminModel????????app/model/

?

基础框架类

Model????????????framework/

MySQLDB????????framework/

?

总结规律:

以Controller结尾的类名,都是控制器类,去app/controller

以Model结尾的都是模型类,去app/model加载

?

一些特例:

Model,去framework

MySQLDB,去framework

?

在完成 类名 推出 类所在的文件时,两种情况:1,有固定规律的载入!(模型类和控制器类);2,没有固定规律数量有限的特例!

?

因此,典型的自动加载文件代码:

判断特例

再判断规律,

利用字符串函数,截取后边几个字符!

控制器类:

?

?

此时 将所有加载类:

index.php

AdminController.class.php

AdminModel

Model.class.php

?

?

路径管理

项目中,使用常量的形式管理路径!

使用绝对路径!

尽量自动获得!

?

首先获得项目的根目录,其他目录依据项目的根目录拼凑出来!

?

(还没有__DIR__时);

取得__FILE__中的路径部分!利用一个函数 dirname来获取一个目录中的目录部分!

?

?

也是在入口文件中完成:index.php

?

如果目录之前进行拼凑,一定会使用到目录分隔符!(PATH_SEPARATOR,路径分隔符) ,不同的操作系统对目录分隔符的支持是不同的!

windows 支持 \(反斜杠) 和 /(斜杠),默认是反斜杠\。

linux 支持 / (斜杠)

因此程序中多见 /斜杠!

除此,还有一个更好的方法:

利用 预定义 常量:DIRECTORY_SEPARATOR,目录分隔符!

因此,最好目录的分隔符应该使用常量代替!

在定义目录常量时,最好保证所有的目录是否有分隔符一致!

选择每个目录常量后,都增加 目录分隔符!

为了方便,将当前的平台也定义成常量:

?

使用该常量:

自动加载方法:

载入视图模板:

?

预习

session,cookie

验证码,简单图片处理!

时间: 2024-08-30 16:37:37

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

04mvc框架原理(8days)01

面向对象关键字: class public,protected,private static const ? self,parent,static ? extends implements abstract interface final ? new clone ? $this ? ? 介绍项目开发 安装ecshop 解压压缩包后,获取其中upload子目录的所有文件,将其放置到可以被浏览器请求到某个目录(建议改名) 请求,index.php即可! 会自动跳转到安装页面(或者可以请求instal

04mvc框架原理(8days)05

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

04mvc框架原理(8days)03

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

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/l_x5585/2015.02.11/176746639012 http://www.ebay.com/cln/jiacha_boryk/2015.02.11/176837188016 http://www.ebay.com/cln/gbnlin0/2015.02.11/176837189016 http://www.ebay.com/cln/j_j2841/2015.02.11/177066749015 http://www.ebay.com/c

百度房间爱师傅卡卡是快乐疯了;爱死

http://www.ebay.com/cln/shx9479/-/177007606013/2015.02.11 http://www.ebay.com/cln/genqi12/-/176846034010/2015.02.11 http://www.ebay.com/cln/seyyon2/-/176906811016/2015.02.11 http://www.ebay.com/cln/wcn5971/-/176846032010/2015.02.11 http://www.ebay.co

百度和房价是否健康教案上开发

http://www.ebay.com/cln/l.kuan2/-/167247714018/2015.02.10 http://www.ebay.com/cln/setlia-3616/-/167086016019/2015.02.10 http://www.ebay.com/cln/pen-y77/-/167086017019/2015.02.10 http://www.ebay.com/cln/yua-me2/-/167399441016/2015.02.10 http://www.eba

百度电话费健身房拉伸件礼服加拉斯减肥

http://www.ebay.com/cln/cnli_c90nphs5e/-/167379958016/2015.02.07 http://www.ebay.com/cln/gaw4612/-/167226239018/2015.02.07 http://www.ebay.com/cln/re_len4/-/167263594010/2015.02.07 http://www.ebay.com/cln/ta.ku83/-/167162702017/2015.02.07 http://www.