博客项目1

一、昨日回顾

1. 知识回顾

  1. mvc的三大组件是什么?

    M:model 模型

    V:view 视图

    C:Controller 控制器

  2. mvc的三大组件分别代表什么意思?

    M:专门用来操作数据表的

    V:专门用来展示视图模板的

    C:专门用来处理业务逻辑,比如说什么时候该调用模型操作数据,什么时候该调用视图展示模板,都是由控制器里来处理。

构建实例化函数

2. 昨日反馈

1531270551320

二、知识路径

  • web项目开发流程介绍

  • 需求分析

    ​ 功能分析

    ​ ER图设计

  • 表设计

  • 项目部署

  • 项目实现

    ​ 实现后台用户管理系统

    ​ 封装验证码工具类

==目标:能够设计项目所需的表、能够部署自主框架、能够实现后台用户管理系统==

三、今日课程内容:博客项目

1. web项目开发流程介绍

1)制定计划:博客项目(blog31) 开发周期:4天

2)需求分析:功能分析 ER图设计

3)软件设计:项目环境 表设计

4)程序编写

5)软件测试

6)运行维护

2. 需求分析

功能分析

  1. 后台用户管理系统;
  2. 后台分类管理系统;
  3. 后台博文管理系统;
  4. 评论管理系统;
  5. 后台登陆和七天免登录;
  6. 前台首页;
  7. 前台注册和登陆功能;
  8. 前台博客文章详情页;

ER图设计

E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。它是描述现实世界概念结构模型的有效方法。是表示概念模型的一种方式,用矩形表示实体型,矩形框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。

专业的ER图工具:Viso和Power Designer

==实体== ==》表:矩形表示

==属性== ==》表字段:椭圆

==关系== ==》表与表的关系:菱形(1:1表示1对1关系;1:n表示1对多关系;m:n表示多对多关系)

博客项目的ER关系图如下:

1531279764230

3. 表设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
drop database blog31;
create database blog31;

#############用户表:
CREATE TABLE `bg_user` (
`id` int unsigned auto_increment,
`acc` varchar(50) not null default '' COMMENT '帐号',
`nickname` varchar(30) not null default '' COMMENT '昵称',
`pwd` char(32) not null default '' COMMENT '密码',
`cell` varchar(15) not null default '' COMMENT '手机号',
`regtime` int unsigned default 0 COMMENT '注册时间',
`type` tinyint unsigned not null default 0 COMMENT '用户类型 0:普通用户 1:管理员',
PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARSET=utf8;

#############博客文章表:
CREATE TABLE `bg_article` (
`id` int(11) unsigned AUTO_INCREMENT,
`title` varchar(100) not null default '' COMMENT '文章标题',
`intro` varchar(255) not null default '' COMMENT '文章简介',
`content` text not null,
`post_date` int unsigned not null default 0 COMMENT '发布时间',
`user_id` int unsigned not null default 0 COMMENT '发布管理员id',
`user_nickname` varchar(30) not null default '' COMMENT '发布管理员昵称',
`comment_num` smallint unsigned not null default 0 COMMENT '评论数量',
`cat_id` int unsigned not null default 0 COMMENT '所属分类id',
`cat_name` varchar(30) not null default '' COMMENT '所属分类名称',
PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARSET=utf8;

#############博客文章分类表:
CREATE TABLE `bg_category` (
`id` int unsigned AUTO_INCREMENT,
`name` varchar(30) not null COMMENT '分类名称',
`parent_id` int unsigned not null default '0' COMMENT '上级分类ID,0表示顶级分类',
PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARSET=utf8;


#############评论表:
CREATE TABLE `bg_comment` (
`id` int unsigned AUTO_INCREMENT,
`content` text not null,
`post_date` int unsigned not null default 0 COMMENT '评论时间',
`article_id` int unsigned not null default 0 COMMENT '所属文章ID',
`article_title` varchar(50) not null default '' COMMENT '所属文章标题',
`user_id` int unsigned not null default 0 COMMENT '用户ID',
`user_nickname` varchar(30) not null default '' COMMENT '用户昵称',
PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARSET=utf8;

4. 项目部署

  1. 将code/mvc目录改名为blog31,

    下图这个mvc目录:

    1531291206947

    改名为blog31:

    1531291235746

  2. 配置一个基于域名虚拟主机,域名为www.blog31.com

    在httpd-vhosts.conf文件中增加如下图所示的虚拟主机配置项:

    1531291311545

    修改hosts文件,

    1531291371313

  3. 重启apache,测试访问效果:

    1531291456736

    访问效果为:

    1531291515331

    能够看到上图,则说明部署成功。

5. 项目实现

实现后台用户管理系统

实现列表页

  1. 将code/templates/admin目录中如下图所示的目录复制一份,

    1531291763786

    转移拷贝到code/blog31/app/admin/view目录中,

    1531291818821

  2. 在blog31/app/admin/controller目录中创建一个名为UserController.class.php的文件,

    1531291945355

  3. 在blog31/app/admin/controller/UserController.class.php中构建如下代码,展示三个页面,

    1531292339989

  4. 测试访问后台用户管理系统列表页

    1531292433660

  5. 进一步做调整,将后台模板使用到的资源文件全部转移进项目中,

    在blog31/public目录中创建一个名为admin的目录,专门保存后台的资源文件,

    1531292599939

    复制code/templates/admin/libs目录下的所有文件,如下图所示,

    1531292644972

    转移拷贝到blog31/public/admin目录中,

    1531292690333

  6. 调整blog31/app/admin/view/User/userIndex.html中引入资源文件的路径,

    在blog31/conf/conf.php中增加本网站域名配置项,

    1531293146377

    然后在blog31/app/admin/view/User/userIndex.html使用配置项URL的值来引入配置文件,

    1531293430682

    1531293486446

    上图中替换的是所有图片文件引入路径,截取不全,实际替换的内容以blog31/app/admin/view/User/userIndex.html中的为准。

  7. 再次测试访问后台新闻管理系统列表页,

    1531293567621

  8. 在blog31/app/model目录中创建UserModel.class.php文件,

    1531293712684

    内容如下:

    1531293731152

    调整blog31/conf/conf.php中PDO配置项的默认选择的数据库名,

    1531294133397

  9. 在blog31/app/admin/controller/UserController.class.php中showIndex方法里渲染模板之前调用模型查询数据,

    1531294688749

    然后在blog31/app/admin/view/User/userIndex.html中回显查询得到的用户数据,

    1531294782348

    测试访问后台用户管理系统列表页:

    1531294828901

实现添加页

  1. 访问后台用户管理系统添加页,

    1531295330114

  2. 调整blog31/app/admin/view/User/userAdd.html中引入资源文件的路径,将”../libs”全部替换为”{C(‘URL’)}/public/admin”,如下图所示,代码截取不全,以实际文件中的代码为准,

    1531295483768

  3. 调整blog31/app/admin/view/User/userAdd.html中的form表单域各项的值,

    1531295777460

  4. 在blog31/app/admin/controller/UserController.class.php中创建一个处理添加用户的方法,adh方法,

    1531296464355

  5. 测试添加用户使用效果:

    在添加表单页面构建数据,点击提交,

    1531296568559
    提交后的效果:

    1531296591547

    效果为添加成功,说明功能实现OK。

实现编辑页

  1. 访问后台新闻管理系统编辑页:

    1531296743041

  2. 修改blog31/app/admin/view/User/userIndex.html中编辑按钮的链接:

    1531296871382

  3. 调整blog31/app/admin/view/User/userEdit.html中引入资源文件的路径,将”../libs”全部替换为”{C(‘URL’)}/public/admin”,如下图所示,代码截取不全,以实际文件中的代码为准,

    1531296956168

  4. 调整blog31/app/admin/view/User/userEdit.html中form表单里的代码,

    1531297468408

  5. 在blog31/app/admin/controller/UserController.class.php中创建updh方法,代码如下:

    1531301022079

  6. 测试使用效果:

    点击进入编辑也,如下图所示:

    1531301120317

    修改数据,

    1531301172674

    点击更新,

    1531301192522

    跳回到更新页面:

    1531301213845

    密码也是被改变了的,如下图所示:

    1531301252698

    说明编辑功能实现OK。

6. 全天总结

  1. 项目中的建表部分:

    如果某字段是需要保存时间,一般在PHP的项目中给int数据类型;

    如果某字段需要保存状态类型的值,使用tinyint会更加好;

    如果某字段保存的数据,我们可以预期的很准确,比如说手机号码,通常就是11位,但是我们在项目中一般会采取宁大不小的原则,给11位以上的值,比如给varchar(15);

    在构建字段的时候,我们一般都会给字段设置default默认值,如果不设置默认值,则今后这个字段无论是否需要添加数据,都必须指定上值。

  2. 项目开发部分:

    我们使用框架进行开发,一般程序开发人员从模板入手,先尝试展示出模板页面的效果,然后再考虑是否需要调用模型操作数据库的问题,所以我们通常在MVC框架中,1)首先会将模板页面转移进项目目录;2)然后会创建控制器类,构建方法调用视图展示模板页面;3)调试模板页面展示的效果;4)以上都成功之后,如果没有模型则需要创建模型,如果有模型则直接去考虑调用模型操作数据;