博客项目开发流程 在进行一个项目开发时,首先要有项目的需求分析,然后根据需求指定计划,再根据项目的计划编写相应的代码,需要Apache+MySQL+PHP三种语言共同完成,主要的编码方式是面向对象。开发环境为MVC自定义框架。 博客项目需求分析此项目主要进行后台的权限管理,无限极分类,博客文章功能,用户功能以及一些扩展功能。后台的权限管理主要有后台管理员的登录。 无限极分类是用来对博客文章的分类管理,而这个分类可以无限的分下去,所以称为无限极分类。 博文功能是对博客文章进行增删改查等功能。 用户功能是前台首页其他用户的注册和登录功能,并进行后台管理。 拓展功能包括一些用户登录点赞、评论以及对博文的检索。 项目文件思路分析在完善一个功能的时候,要知道这个功能的需求,根据需求设计方法,将方法封装成类,在需要的时候调用或者自动调用;然后连接数据库得到想要的数据或者将用户的请求包括注册登录等写入数据库,同时判断数据合法性及合理性,将从数据库得到的动态数据替换到静态的html文件中。 博客项目数据库表的设计在一些大型项目中 数据库表的设计往往都是有着严格规定的,一般是由驼峰法或者下划线连接法来命名的,此项目中的表使用的是下划线连接法。数据库名字使用Blog,表名采用bl_加相应的表名。 首先是创建后台管理员表,表名为bl_admin,表结构为: 1、主键id,自增长的整型,主键的目的是确保每个id的唯一性。 2、a_username,管理员用户名,前缀a为admin的首字母,是为了区分其他表中其他的用户名,不能为空且唯一,长度稍长,设置了50个字符。 3、a_password,管理员密码,前缀同样是为了区分其他表中其他密码,不能为空,由于密码在数据库中的存储为md5加密的形式,所以密码长度为固定的32位。 然后是用户表,表名为bl_user,表结构为: 1、主键id,自增长的整型,目的是确保id的唯一性。 2、u_username,用户名,前缀u为user的首字母,最大长度50,不能为空且唯一。 3、u_password,用户密码,长度固定32,不能为空。 4、u_email,用户邮箱,最大长度80,且唯一。 5、u_logintime,用户登录时间,无符号整型数据。 分类表,表名为bl_category,表结构为: 1、主键id,自增长的整型,目的确保id的唯一性。 2、c_name,分类名,c为category的首字母,最大长度50,不能为空。 3、c_parent_id,父分类的ID,整形,默认为0,0表示定义分类,其子分类为1,再下级分类为2、3...。 4、c_sort,分类排序,无符号整型,默认为100。 文章表,表名为bl_article,表结构为: 1、主键id,自增长整型,目的确保id的唯一性。 2、a_name,博文名,a为article的首字母,最大长度100,不能为空。 3、a_content,博文内容,文本格式,不能为空。 4、c_id,所属分类的id,c为category分类的首字母,因为分类信息在bl_category表中。整型,不能为空。 5、a_publishtime,文章的发布时间,不能为空的整型。 6、a_status,文章的发布方式,enum为提供的几个选项,不能为空。 7、a_sort,文章的排序,无符号的整型,默认为100。 评论表,表名为bl_comment,表结构为: 1、主键id,自增长的整型。 2、c_content,评论内容,c为comment的首字母,文本类型,不能为空。 3、a_id,评论的所属文章的id,a为文章表article的首字母,获取文章的id在article表中,不能为空的整型。 4、u_id,评论用户的id,必须要登录才可以评论,所以每个用户有相应的用户id,不能为空的整型。 5、c_time,评论时间,不能为空的整型。 搭建MVC环境将之前搭建好的自定义mvc框架内容放在创建的文件夹下,然后搭建虚拟主机,首先修改apache目录下的conf/extra下的httpd-vhosts.conf文件,设置网站的域名、根目录、默认首页、权限等,修改后重启apache;然后修改hosts文件,使用热键win+r,输入drivers,打开etc文件夹里面的hosts文件,在最后输入 127.0.0.1 空格后面输入网站的域名,www.blog.com;虚拟主机就搭建完成了。 然后设置apache分布式权限,在网站文件的根目录创建 .htaccess文件,文件内容为: RewriteEngine On 环境搭建完成,将从前端得到的静态的html文件放入相应的文件夹中,便于管理。 项目功能完善过程在功能完善之前,要连接数据库,因为大部分的数据都是存在于数据库中的,所以要连接数据库得到相应的数据或者写入数据。之前已经做过连接数据库的过程所以不在过多赘述。 实现的得到具体表名的方法在执行sql语句时,不可避免的一定会用到表名,但是表前缀都一样为bl_,不同的是后面的具体表名,所以要在模型中增加相应得到表名的方法。 在Model.class.php中增加得到表名的方法,在每一次执行SQL语句时需要用这个方法。 同时也应该完善配置文件中的数据库选择、表前缀的字段。 实现session入库所谓session入库就是将session数据库保存到数据库中,因为session默认是存在于文件中的,所以文件的效率和I/O会影响到高并发,所以要将session入库。 这时需要用到一个新的数据库表,所以要为其创建一个新的表: 表名bl_session,表结构为: 1、s_id,主键id,s为session的前缀,为了与其他表的字段区分开,下同。 2、s_content,序列化的数据,文本格式。 3、s_expire, session的创建时间,无符号的整型且不能为空。 表创建完成后要开始完善其他内容,首先封装session类。因为session需要连接数据库,所以将其放入核心文件夹Core下,可以继承之前写好的模型类Model.class.php,使其可以使用其中的连接数据库的方法。 在Core文件下创建session.class.php文件,在其中完善session类,命名空间使用Core,session类继承于Model类;类中需要一个受保护的属性,用来保存表的名字,为了后期的sql语句需要用到表名提前准备;在类中实现session需要的6个方法: 1、open方法,用来连接数据库,因为其父类的构造方法已经实现的DAO的初始化,所以连接已经建立好,这里可以不添加内容。 2、lose方法,用来销毁资源,此处不需要销毁,所以方法具体内容也为空。 3、read方法,用来读取数据,通过sessionid从数据库中取出数据,所以方法需要一个参数,就是session的id。 4、write方法,向数据库中写入数据,同读取一样,也是通过sessionid写入,但是不同于read,write还需要一个参数,就是写入的内容。 5、destroy方法,从数据库中删除数据,同读数据,需要通过sessionid删除,所以需要一个参数就是sessionid。 6、gc方法,gc是英文Garbage Collection的缩写,是垃圾回收方法,但是清理在读取之后,所以在读取时要添加去除过期的脏数据的方法。 完善了6个方法之后,需要将方法注册到session机制中,需要用到session_set_save_handler函数,而且需要将方法写入构造方法中自动调用。但是由于session类继承了Model类,在实例化的时候,子类会重写父类的构造方法,此时需要在构造方法中使用parent关键词主动调用父类的构造方法,使其完善;并在构造方法中使用session_start方法来开启session。 基于前后台都需要session,所以要在项目初始化时就实现session的入库,所以要在初始化的文件App.class.php中实现加载。 实现登录表单开始实现的是后台的管理员登录,所以要增加相应的控制器。在后台文件夹下面的控制文件中增加相应的文件来实现对其的控制。 App/Back/Controller下创建privilege.class.php文件,其中增加index方法来显示登录表单,在其中使用display方法来显示表单。同时在显示的静态html文件中修改CSS和JavaScript的路径。同时在静态文件中添加隐藏域来控制表单提交的对象,隐藏域的name属性分别为平台p、模型m、方法a。 完成了表单的显示之后,用户就可以进行登录操作,登录就需要判断数据的合法性合理性,所以要在控制表单的文件中添加check方法来判断登录是否合法。方法中要使用$_POST方法来获取到用户提交的用户名、密码以及验证码,先判断提交对的内容是否为空,如果数据为空将不进行其他判定而直接跳转到之前的登录页面。当用户输入的内容不为空时,判定验证码是否正确,如果验证码不正确,判断用户名和密码的操作就没有意义。判断通过后,将用户名和密码与从数据库取出的数据进行比较。由于密码入库时是经过md5加密的,所以判断时徐亚奥将得到的密码进行md5方法处理之后再进行比较。所有判断成功后跳转至后台首页。 在后台增加相应的控制器,在控制器中增加display方法显示后台页面的方法。同时修改静态页面中CSS和JavaScript的路径,来完善页面的显示。
|