04mvc框架原理(8days)02
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
?
布局总结
项目:做了三次分割:
- 业务逻辑与框架基础代码!(app,Framework)
- mvc的分割!(app/controller, app/model, app/view)
- 平台的分割!(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
验证码,简单图片处理!
以上是关于04mvc框架原理(8days)02的主要内容,如果未能解决你的问题,请参考以下文章