码迷,mamicode.com
首页 > Web开发 > 详细

04mvc框架原理(8days)02

时间:2016-05-23 13:25:48      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:

框架

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

一:项目的架构模式(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

验证码,简单图片处理!

04mvc框架原理(8days)02

标签:

原文地址:http://www.cnblogs.com/yizhinageyuanfang/p/5519574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!