php源码建博客5--建库建表-配置文件-错误日志

Posted 遗落的白菜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php源码建博客5--建库建表-配置文件-错误日志相关的知识,希望对你有一定的参考价值。

主要:

  1. 整理框架
  2. 建库建表
  3. 配置文件类
  4. 错误日志记录
--------------本篇后文件结构:--------------------------------------
blog
├─App
│  ├─Model 模型目录
│  ├─View 视图目录
│  │  ├─Admin后台目录
│  │  └─Home前台目录
│  ├─Common 配置目录
│  │  └─config.php  配置文件
│  ├─Log 日志目录
│  │  └─log.txt  日志文件
│  ├─Controller 控制器
│  │  ├─Admin后台
│  │  │  └─DemoController.class.php 测试控制器
│  │  └─Home前台
├─Public   静态公共文件(js,css,images)
│  ├─Plugins 插件
│  ├─Back后台
│  └─Home前台
├─Frame 公共使用的类
│   ├─BaseModel.class.php 数据库连接类
│   ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转)
│   ├─FactoryModel.class.php  模型工厂类
│   ├─Log.class.php  日志厂类
│   ├─Config.class.php  配置文件读取类
│   ├─Init.class.php  初始化应用类
│   └─mysqlDB.class.php 数据库操作工具类
└─index.php  入口文件
-----------------------------------------------------------------------------------------------------

 


利用上篇中搭建好的mvc框架结构,正式开始开发博客项目。首先建立数据表,然后开始搭建后台,数据前台展示,完成博客主要模块展示。

下载查看该项目源码https://gitee.com/NewbiesYang/young_blog

整理框架

  清理测试页面

    1)前面构建框架结构,使用了用户登录测试页面以及后台首页页面。在此全部去掉,从新开始构建前台和后台页面。类似于我们下载了一个ThinkPHP或Laravel或其他的框架。 现在开始在这个微型框架上来构建我们的项目

    2) 实际开发,会用前端人员做好的静态页面来进行开发。所以也可以在 【模板之家】或其他网站 下载 后台模板和前台博客静态页面。然后专注于后端开发,可以加快速度。本项目供学习研究使用,也就不那么着急了。

     原本是准备全部利用别人写好的前端页面(包括前端显示和后台页面),专注于后端逻辑的开发。而且已经把分类页面列表都做好了。还提交传送了。

     此刻,仔细想想,要是这样玩,那我直接用框架更好了。既然做后端开发,自己写个后端页面+程序处理,没什么问题吧..., 置于前端显示页面,那再用前辈写的前端页面倒是可以的

    于是乎,卷起柚子,说干就干,先来整理框架,开始搭建博客。。。。。
说一说

  框架结构:

--------------清理后MVC框架文件结构:--------------------------------------
blog
├─App
│  ├─Model 模型目录
│  ├─View 视图目录
│  │  ├─Back后台
│  │  └─Home前台
│  ├─Controller 控制器目录
│  │  ├─Back后台
│  │  └─Home前台
├─Public   静态公共文件(js,css,images)
│  ├─Plugins 插件
│  ├─Back后台
│  └─Home前台 
├─Frame 公共使用的类
│   ├─BaseModel.class.php 数据库连接类
│   ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转)
│   ├─FactoryModel.class.php  模型工厂类
│   ├─Init.class.php  初始化应用类
│   └─MySQLDB.class.php 数据库操作工具类
└─index.php  入口文件
-----------------------------------------------------------------

  后续的开发只需要复制该目录结构文件, 就可以在此基础上进行开发了。

提交传送代码

git add -A
git commit -m "清理MVC结构"
git push origin master

  插件准备

    1) layui插件: 搭建后台程序,准备使用layui前端框架,这个框架个人认为做后台界面还是不错的。它还包含一些比较使用模块。 

        用bootstrap也可以,我更加倾向于用它来做前台页面。

      下载网址: http://www.layui.com/

    2) jQuery库:  更方便操作DOM, 尤其是经常使用ajax请求。

    3) 其他插件: 如Ueditor编辑器等 需要使用时再下载吧。一般插件都会有demo示例, 按照示例和手册,懂web开发基本能使用。

    上述插件暂时不熟悉没有关系,官网上有手册,需要什么模块,便查手册便使用,就像搭积木,如果要做得更好,当然要花更多的时间多练习。我本着后台给程序管理员使用,也不一定要非常漂亮,实用就好。

建库建表

  准备: 创建分支

$ git checkout master
$ git checkout -b "start-admin-module"

  建表思路:

    根据博客模板,从首页开始分析,  分析哪些需要动态数据,以便建立对应数据表。

      用户: 登录, 注册, 修改, 删除

      文章: 分类管理, 博文管理, 评论管理

      角色管理: 管理员,普通用户

      菜单管理: 不同权限人员,对应菜单栏也有区别

    建表工具可以任意选择。初期手工写建表语句,熟悉后直接使用工具。 本项目中使用 Navicat 建立数据库和表

   数据库,表

    1) 创建数据库:php_blog

create database php_blog charset utf8

    2) 用户表: y_users 

CREATE TABLE `y_user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT \'用户主键\',
  `username` varchar(20) NOT NULL COMMENT \'用户名\',
  `password` char(32) NOT NULL COMMENT \'密码\',
  `email` varchar(50) NOT NULL DEFAULT \'\' COMMENT \'注册邮箱\',
  `token_email` varchar(32) NOT NULL DEFAULT \'\' COMMENT \'邮箱验证\',
  `status` tinyint(1) unsigned NOT NULL DEFAULT \'0\' COMMENT \'状态, 0-正常,1-禁用\',
  `gid` tinyint(1) unsigned NOT NULL DEFAULT \'0\' COMMENT \'角色id,1-管理员,2-普通用户,0-无效\',
  `login_ip` varchar(20) NOT NULL DEFAULT \'\' COMMENT \'最后登录的ip地址\',
  `login_times` smallint(6) unsigned NOT NULL DEFAULT \'0\' COMMENT \'登录次数\',
  `created_at` int(10) unsigned NOT NULL DEFAULT \'0\' COMMENT \'注册时间\',
  `updated_at` int(10) unsigned NOT NULL DEFAULT \'0\' COMMENT \'最后一次登录时间\',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT=\'用户表\';
用户表SQL

    3)角色表: y_user_group

CREATE TABLE `y_user_group` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT \'角色id\',
  `name` varchar(20) NOT NULL DEFAULT \'\' COMMENT \'角色名称\',
  `auths` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'角色权限\',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT=\'角色表\';
角色表SQL

    4) 菜单表: y_menus

CREATE TABLE `y_menus` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT \'菜单id\',
  `title` varchar(20) DEFAULT \'\' COMMENT \'菜单名称\',
  `controller` varchar(30) DEFAULT \'\' COMMENT \'控制器名称\',
  `action` varchar(30) DEFAULT \'\' COMMENT \'操作名称\',
  `status` tinyint(1) unsigned DEFAULT \'1\' COMMENT \'状态,1-正常,0-禁用\',
  `is_hidden` tinyint(1) unsigned DEFAULT \'0\' COMMENT \'是否隐藏,0-正常显示,1-隐藏\',
  `sort` int(10) unsigned DEFAULT \'0\' COMMENT \'排序\',
  `pid` int(10) unsigned DEFAULT \'0\' COMMENT \'上一级菜单\',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT=\'菜单表\';
菜单表SQL

    5) 文章表 y_article

CREATE TABLE `y_article` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT \'文章id\',
  `title` varchar(60) NOT NULL DEFAULT \'\' COMMENT \'标题\',
  `description` varchar(200) NOT NULL DEFAULT \'\' COMMENT \'文章简介\',
  `content` text NOT NULL COMMENT \'内容\',
  `cid` int(10) unsigned NOT NULL COMMENT \'文章类别\',
  `pic` varchar(150) NOT NULL DEFAULT \'\' COMMENT \'文章封面图\',
  `pic_watermark` varchar(150) NOT NULL DEFAULT \'\' COMMENT \'水印图\',
  `pic_thumb` varchar(150) NOT NULL DEFAULT \'\' COMMENT \'缩略图\',
  `uid` int(10) unsigned NOT NULL COMMENT \'作者\',
  `clicks` int(10) unsigned NOT NULL DEFAULT \'0\' COMMENT \'阅读数(点击数)\',
  `updated_at` int(10) unsigned NOT NULL DEFAULT \'0\' COMMENT \'更新时间\',
  `created_at` int(11) NOT NULL DEFAULT \'0\' COMMENT \'发布时间\',
  PRIMARY KEY (`id`),
  KEY `title` (`title`),
  KEY `uid` (`uid`),
  KEY `clicks` (`clicks`),
  KEY `cid` (`cid`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT=\'文章表\';
文章表SQL

    6) 文章类别表 y_category

CREATE TABLE `y_category` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT \'分类id\',
  `catename` varchar(15) NOT NULL COMMENT \'分类名\',
  `description` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'简介\',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT=\'文章类别表\';
文章类别表SQL

    7) 评论(回复)表 y_comment

CREATE TABLE `y_comment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT \'评论id\',
  `uid` int(10) unsigned NOT NULL COMMENT \'评论者\',
  `created_at` int(11) DEFAULT NULL COMMENT \'评论时间\',
  `content` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'评论内容\',
  `aid` int(10) unsigned NOT NULL COMMENT \'被评论的文章\',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=\'评论(回复)表\';
评论(回复)表SQL

    8) session数据表 y_session  (其实可以不用这个,目的是为了操作 "将session写入数据库" )

CREATE TABLE `y_session` (
  `sess_id` varchar(50) NOT NULL DEFAULT \'\' COMMENT \'session id\',
  `data` text NOT NULL COMMENT \'session数据\',
  `created_at` int(11) NOT NULL COMMENT \'session创建时间\',
  PRIMARY KEY (`sess_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=\'session数据表\';
session数据表SQL

    为了避免弄的太复杂, 暂时建立这些数据表,字段后续可以进行调整。如果需要加入模块功能,可以相应增加相应数据表。

  连接数据库

    在badeModel中修改数据连接的数组信息 【Frame/BaseModel.class.php】  (如果使用配置文件类,此处就可以省略了)

 1 class BaseModel {
 2     。。。
 3     。。。
 4     。。。
 5     function __construct(array $config=null)
 6     {
 7         $conf = array(
 8             \'host\'=>\'localhost\',
 9             \'user\'=>\'root\',
10             \'pwd\'=>\'root\',
11             \'port\'=>\'3306\',
12             \'charset\'=>\'utf8\',
13             \'dbname\'=>\'php_blog\',
14         );
15         $conf = empty($config)? $conf : array_merge($conf,$config);
16         $this->db = Db::getDb($conf);
17     }
18 }
设置连接数据库信息

配置文件类

  需求分析:

    为了框架便于数据库连接以及方便读取配置文件。如 希望在 App/Common/config.php 做一些配置项,要求能读取这些配置并应用到项目

  思路:

step 1:  创建文件  App/Common/config.php  并将数据库连接信息写入该配置文件

step 2:  在Frame/目录下创建读取配置文件类 Config.class.php

step 3: 设置自动加载 读取配置类

step 4: 基础模型类实例化 读取配置类。 操作数据库必须要经过基础模型类

step 5:  调整数据库工具类获取配置信息,既 其构造方法中通过传递进来的数据配置信息对象获取

step 6: 测试连接数据结果,验证获取配置
实现连接数据库-读取数据库配置信息思路

  代码实现

    1) 创建配置文件config.php  【App/Common/Config.php】

<?php
/**
 * 配置文件
 * User: young
 */
return [
    //数据库连接配置
    \'host\'=>\'localhost\',
    \'user\'=>\'root\',
    \'pwd\'=>\'root\',
    \'port\'=>\'3306\',
    \'charset\'=>\'utf8\',
    \'dbname\'=>\'php_blog\',
];
配置文件-数据库配置信息

    2) 创建读取配置文件类 【Frame/Config.class.php】

 1 <?php
 2 /**
 3  * 配置文件读取类
 4  * User: young
 5  */
 6 
 7 class Config
 8 {
 9     protected static $ins = null;  //本类实例
10     protected $cfg = array(); //存储配置项
11 
12     /**
13      *  获取本类实例
14      * @access public
15      * @return  object     本类的单例对象
16      */
17     public static function getIns() {
18         if(false === (self::$ins instanceof self)){
19             self::$ins = new self();
20         }
21         return self::$ins;
22     }
23 
24     /**
25      *  构造方法: 读取配置项
26      * @access public
27      * @return  void
28      */
29     final protected function __construct() {
30         require APP.\'Common\'.DS.\'config.php\'; //读取配置项
31         $this->cfg = $cfg;
32     }
33 
34     /**
35      * 根据指定的配置项,返回该配置项的值
36      * @param string $k  配置项
37      * @return mixed|null 返回配置项的数据
38      */
39     public function __get($k) {
40         if(!isset($this->cfg[$k])) {
41             return null;
42         }
43         return $this->cfg[$k];
44     }
45 
46 
47     /**
48      * 根据指定的配置项,返回配置项的值
49      * @param  string $k 配置项名称
50      * @param string $v 配置项对应的值
51      */
52     public function __set($k,$v) {
53         $this->cfg[$k] = $v;
54     }
55 }

    3)  自动加载配置类

      需要自动加载该类, 该类在Frame目录下, 所以可以写入到 Init.class.php 类中的属性数组中   【Frame/Init.class.php】

 1 <?php
 2 /**
 3  * 初始化应用类
 4  * User: young
 5  */
 6 
 7 class Init
 8 {
 9     protected static $frame = array(\'BaseController\',\'BaseModel\',\'Db\',\'FactoryModel\',\'Config\');
10 。。。
11 。。。
12 。。。
自动加载配置类

    4)基础模型类实例化配置类【Frame/BaseModel.class.php】

 1 <?php
 2 
 3 /**
 4  * BaseModel.class.php 基础模型类
 5  *     连接数据库
 6  *  @author young
 7  */
 8 class BaseModel
 9 {
10     protected $db = null;
11     /**
12      * 构造方法: 实例化数据库类
13      * @access public
14      */
15     function __construct()
16     {
17        $conf =  Config::getIns(); //读取配置项实例
18         $this->db = Db::getDb($conf);
19     }
20 }

    5)数据库读取配置项信息  【Frame/Db.class.php】     

 1 <?php
 2 /**
 3  * Db.class.php 数据库操作工具类
 4  * @author young
 5  */
 6 
 7 class Db {
 8 。。。
 9 。。。
10 。。。
11     /**
12      * 构造方法: 保存数据库连接信息,连接数据库
13      * @access private
14      * @param array $conf 数据库连接信息
15      数据库系统概论(第5版)萨师煊.王珊代码mysql版本(建库建表查询语句)

MySQL的建库建表建约束与存储引擎

MySQL的建库建表建约束与存储引擎

MySQL - 建库建表查询

mysql那些事建库建表编码的选择

DDL