从零开始打造自己的PHP框架,配置文件

作者: 网络编程  发布:2019-09-06

本篇,大家的对象有多少个:

主要:

  • 调解项目结构
  • 加载配置类
  • 加多日志类
  1. 收拾框架
  2. 建库建表
  3. 陈设文件类
  4. 不当日志记录
vkphp├─app│ ├─ctrl│ ├─model│ ├─smarty│ └─view├─config├─core├─lib├─log└─public
--------------本篇后文件结构:--------------------------------------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  入口文件-----------------------------------------------------------------------------------------------------
  • app内含有调节器、数据库model、smarty模板、普通渲染模板。
  • config内包罗全局配置文件。
  • core内包括框架的为主文件。
  • lib内满含第三方库。
  • log内部存款和储蓄器放日志文件。
  • public包涵静态能源文件。

大家事先的路由配置、数据库配置都是写在前后相继中的,修改起来不实惠,下边我们把那么些安插都放在配置文件中。

动用上篇中搭建好的mvc架构,正式启幕开采博客项目。首先创制数据表,然后开端搭建后台,数据前台展示,完毕博客重要模块展示。

在core目录中,新建conf.php,内容如下:

下载查看该品种源码

<?phpnamespace core;class conf{ public function get($name,$file){ /** * 1、判断文件是否存在 * 2、判断配置是否存在 */ $file_path = CONFIG.'/'.$file.'.php'; if(is_file($file_path)){ $conf = include $file_path; if(isset($conf[$name])){ return $conf[$name]; }else{ throw new Exception('没有配置项'.$name); } }else{ throw new Exception('找不到配置文件'.$file); } } public function all{ $file_path = CONFIG.'/'.$file.'.php'; if(is_file($file_path)){ $conf = include $file_path; return $conf; }else{ throw new Exception('找不到配置文件'.$file); } }}

整理框架

在config目录中,新建配置文件route_config.php和db_config.php。

  清理测量试验页面

    1)前面营造框架结构,使用了客商登陆测验页面以及后台首页页面。在此全体去掉,从新起来创设前台和后台页面。类似于我们下载了贰个ThinkPHP或Laravel或另外的框架。 今后上马在这些微型框架上来创设大家的品类

    2) 实际支出,会用前端人士做好的静态页面来开展支付。所以也能够在 或别的网站 下载 后台模板和前台博客静态页面。然后小心于后端开拓,能够加火速度。本项目供就学商量选用,也就不那么匆忙了。

图片 1图片 2

     原本是准备全部利用别人写好的前端页面(包括前端显示和后台页面),专注于后端逻辑的开发。而且已经把分类页面列表都做好了。还提交传送了。     此刻,仔细想想,要是这样玩,那我直接用框架更好了。既然做后端开发,自己写个后端页面+程序处理,没什么问题吧..., 置于前端显示页面,那再用前辈写的前端页面倒是可以的    于是乎,卷起柚子,说干就干,先来整理框架,开始搭建博客。。。。。

说一说

<?phpreturn array( 'CTRL'=>'index', 'ACTION'=>'index');

<?phpreturn array( 'DSN'=>'mysql:host=localhost;dbname=vkphp', 'USER'=>'root', 'PASSWD'=>'');

  架构:

--------------清理后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 -Agit commit -m "清理MVC结构"git push origin master

修改core目录中的route.php和db.php。

  插件计划

    1) layui插件: 搭建后台程序,打算选择layui前端框架,那些框架个人认为做后台分界面依旧不错的。它还包罗部分比较使用模块。

        用bootstrap也足以,小编进一步偏侧于用它来做前台页面。

      下载网站:

    2) jQuery库: 更方便操作DOM, 极度是平常使用ajax央求。

    3) 别的插件: 如Ueditor编辑器等 须要利用时再下载吧。一般插件都会有demo示例, 遵照示例和手册,懂web开拓为主能选取。

    上述插件暂且不熟悉未有关联,官英特网有手册,必要如何模块,便查手册便利用,就好像搭积木,假诺要做得越来越好,当然要花更加多的小运多练习。作者本着后台给程序管理员使用,也不必然要非常优秀,实用就好。

<?php/** * 路由控制 */namespace core;class route{ public $ctrl='index'; public $action='index'; public $params=array(); public function __construct(){ //echo 'route is ready!'; /** * 1、隐藏index.php * 2、获取URL中的控制器和方法 * 3、获取URL中的参数 */ $this->ctrl = coreconf::get('CTRL','route_config'); $this->action = coreconf::get('ACTION','route_config'); // 其他不变}

<?phpnamespace core;class db extends PDO{ public function __construct(){ $conf = coreconf::all('db_config'); $dsn = $conf['DSN']; $user = $conf['USER']; $passwd = $conf['PASSWD']; try{ parent::__construct($dsn,$user,$passwd); // echo 'database connect success'; }catch (Exception $e){ echo $e->getMessage(); } }}

建库建表

  筹算: 成立分支

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

在core目录,增多log.php文件,内容如下:

  建表思路:

    依照博客模板,从首页最初解析, 分析怎样必要动态数据,以便创设相应数据表。

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

      小说: 分类管理, 博文管理, 商讨管理

      剧中人物管理: 管理员,普通客户

      菜单管理: 不相同权限人士,对应菜单栏也是有分别

    建表工具得以自由选取。开始的一段时期手工业写建表语句,熟谙后直接行使工具。 本项目中应用 Navicat 创立数据库和表

<?phpnamespace core;class log{ public function log($message,$file_name){ $log_path = LOG.'/'.$file_name.'-'.date.'.log'; $message = date('Y-m-d H:i:s').' '.$message; file_put_contents($log_path,json_encode); }}

   数据库,表

    1) 创立数据库:php_blog

create database php_blog charset utf8

    2) 用户表: y_users 

图片 3图片 4

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 ,  UNIQUE KEY `username` (`username`),  UNIQUE KEY `email`  ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户表';

用户表SQL

    3)角色表:y_user_group

图片 5图片 6

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  ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

角色表SQL

    4) 菜单表:y_menus

图片 7图片 8

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  ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';

菜单表SQL

    5) 文章表 y_article

图片 9图片 10

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 ,  KEY `title` ,  KEY `uid` ,  KEY `clicks` ,  KEY `cid`  USING BTREE) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='文章表';

文章表SQL

    6) 作品连串表 y_category

图片 11图片 12

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  ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='文章类别表';

文章系列表SQL

    7) 评论表 y_comment

图片 13图片 14

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  ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='评论表';

评论表SQL

    8) session数据表 y_session (其实能够绝不这么些,目标是为了操作 "将session写入数据库" )

图片 15图片 16

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

    为了防止弄的太复杂, 权且确立那个数据表,字段后续能够进行调治。若是急需到场模块成效,能够对应扩展对应数据表。

在indexCtrl.php中,添加:

  连接数据库

    在badeModel中期维修改数据连接的数组消息【Frame/BaseModel.class.php】 (要是运用布署文件类,此处就足以大致了)

图片 17图片 18

 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 }

设置连接数据库消息

public function log(){ $log = new corelog(); $log->log('this is log','log_test'); echo '成功写入日志';}

配置文件类

访问 ,就可以在log目录下转移日志文件。如若时间不得法,就在php.ini中寻找 date.timezone ,然后修改时区为:

  须求分析:

    为了框架便于数据库连接以及福利读取配置文件。如 希望在 App/Common/config.php 做一些配备项,须要能读取这个安插并选择到花色

data.timezone="Asia/Shanghai"

  思路:

图片 19图片 20

step 1:  创建文件  App/Common/config.php  并将数据库连接信息写入该配置文件step 2:  在Frame/目录下创建读取配置文件类 Config.class.phpstep 3: 设置自动加载 读取配置类step 4: 基础模型类实例化 读取配置类。 操作数据库必须要经过基础模型类step 5:  调整数据库工具类获取配置信息,既 其构造方法中通过传递进来的数据配置信息对象获取step 6: 测试连接数据结果,验证获取配置

福衢寿车连接数据库-读取数据库配置消息思路

或许,直接在程序代码中应用函数ini_set('date.timezone','Asia/Shanghai'); ,或者date_default_timezone_set(‘Asia/Shanghai');

  代码实现

    1) 创造布局文件config.php 【App/Common/Config.php】

图片 21图片 22

<?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 public15      * @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 public27      * @return  void28      */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】

图片 23图片 24

 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 public14      */15     function __construct()16     {17        $conf =  Config::getIns(); //读取配置项实例18         $this->db = Db::getDb($conf);19     }20 }

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

图片 25图片 26

 1 <?php 2 /** 3  * Db.class.php 数据库操作工具类 4  * @author young 5  */ 6  7 class Db { 8 。。。 9 。。。10 。。。11     /**12      * 构造方法: 保存数据库连接信息,连接数据库13      * @access private14      * @param array $conf 数据库连接信息15      */16     private function __construct($conf)17     {18         $this->host = $conf->host;19         $this->user = $conf->user;20         $this->pwd = $conf->pwd;21         $this->port = $conf->port;22         $this->charset = $conf->charset;23         $this->dbname = $conf->dbname;24         $this->connect();25     }26 。。。27 。。。28 。。。29 }

数据库工具类获取配置音讯

    6) 测量检验 在App/Controller/Home/德姆oController.class.php 用于测量检验数据库连接意况

图片 27图片 28

<?php/** * 测试控制器类 * User: young */class DemoController extends BaseController{    public function test()    {        $db = new BaseModel();        $data = $db->db->getAllRows("select * from y_user");        var_dump;    }}

测验调整器类测验连接数据库

  注: 前提,要求将BaseModel.class.php中的$db属性先暂且退换为public公开,本事测量检验成功 (原因:在Demo调节器中实例化的根基模型类,数据库操作实例是放在类的习性db中,外界无法访谈protected属性), 本节全数测量试验,能够近期将db设置为公开的。

图片 29

仍是能够动用安插如: 上传目录,网址配置音信等,依照必要自定义配置须求,再通过读取配置类读取配置的多少

交付代码

git add -Agit commit -m "完成读取配置文件类"

荒唐日志记录

  除了开垦阶段调节和测量检验错误, 项目上线一般会将错误音讯写入钦定文件中。安全性更好。

从零开头创设自身的PHP框架

  供给深入分析:

    将错误写入日志文件中,这里目前首要记录数据库操作的错误。 如:私下认可将错误记录在App/log/logError.txt。 要是在铺排文件中实行了安插,则将日志音讯写入到计划项log钦赐的目录中

  思路:

图片 30图片 31

step 1: 制作日志类Frame/Log.class.php, 用于将错误信息写入到指定文件中。  (设置日志文件位置,正好可以利用上面写的配置项,通过读取配置来实现)step 2: 在基础模型类BaseModel中,读取配置项后, 可以将日志目录路径写入常量。 使用try..catch 捕捉异常,将错误写入日志step 3: 实现日志类自动加载。Log类在Frame目录中,所以只要在初始化应用类Init中的属性$frame数组中加入 “Log”step 4: 记录错误。 数据库连接可能失败, sql语句可能执行失败step 5: 测试错误日志记录功

落到实处错误日志记录进程思路

  代码完结

  1) 制作错误日志类 【Frame/Log.class.php】

 1 <?php 2 /** 3  * 日志类 4  * User: young 5  */ 6  7 class Log 8 { 9     /**10      * 记录错误信息到文件中11      * @param string $err 错误信息12      */13     public static function write($err)14     {15         date_default_timezone_set; //时区设置16         //打开文件17         $fh = fopen(LOG.'log.txt','a'); // 追加方式打开18 19         //拼接信息20         $err = date('Y年m月d日 H:i:s',time . "trn" . $err . "trn";21 22         //写入23         fwrite($fh,$err);24 25         //关闭26         fclose($fh);27     }28 }

  2) 读取日志地点,捕捉错误 【Frame/BaseModel.class.php】

    产生错误记录后,这里只是简短使用exit退出, 能够自定error错误页面会越来越好

图片 32图片 33

 1 <?php 2  3 /** 4  * BaseModel.class.php 基础模型类 5  *     连接数据库,捕捉记录错误 6  *  @author young 7  */ 8 class BaseModel 9 {10     Public $db = null;11     /**12      * 构造方法: 实例化数据库类13      * @access public14      */15     function __construct()16     {17         $conf =  Config::getIns(); //读取配置项实例18 19         //读取日志配置项目 并写成常量20         $logPath = $conf->log;21         $logPath = !isset($logPath) ? APP."log".DS  : $logPath;22         define('LOG',$logPath);23 24         //监控数据库操作25         try {26             $this->db = Db::getDb($conf);27         }catch(Exception $e) {28             $err = '';29             $err .= '错误代码:' . $e->getCode() . "rn";30             $err .= '错误信息:' . $e->getMessage() . "rn";31             $err .=  '文件:' . $e->getFile() . "rn";32             $err .=  '行号:' . $e->getLine() . "rnrn";33             Log::write($err);34             exit("<h2>客官!页面暂时无法响应,请稍后访问</h2>");35         }36     }37 }

点击查阅【基础模型类中监测并记下错误】

  3)自动加载日志记录类 【Frame/Init.class.php】

图片 34图片 35

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

点击查看

  4) 记录错误 【Frame/Db.class.php】

数据库连接或然发生错误管理

图片 36图片 37

 1  class Db 2 { 3 。。。 4 。。。 5 。。。 6     /** 7      * 连接数据库,设置编码,选库 8      * @access private 9      */10     private function connect()11     {12         $this->link = @ mysql_connect("{$this->host}:{$this->port}", "$this->user", "$this->pwd") ;13         if(!$this -> link) {14             $error = new Exception("数据库连接不上",10000);15             throw $error;16         }17         $this->setCharset($this->charset);18         $this->useDb($this->dbname);19     }20 。。。21 。。。22 。。。

点击查看【数据库连接错误抛出】

sql语句产生错误管理

图片 38图片 39

 1  class Db  2 { 3 。。。 4 。。。 5 。。。 6     /** 7      * 执行sql语句 8      * @param  string $sql sql语句 9      * @return mixed10      */11     private function query($sql)12     {13         $result = mysql_query($sql, $this->link);14 //        if(false === $result) {15 //            echo "<p>sql执行失败!<br>";16 //            echo "<br>失败语句:".$sql;17 //            echo "<br>错误代号".mysql_errno();18 //            echo "<br>错误提示: ".mysql_error()."</p>";19 //            exit();20 //        }21         if(false === $result) {22             $err = "sql执行失败!rn失败语句:".$sql."rn错误代号:".mysql_errno()."rn错误提示:".mysql_error()."rnrn";23             Log::write($err);24             exit("<h2>查询出错,请稍后访问</h2>");25         }26         return $result;27     }28 。。。29 。。。30 。。。

点击查看【试行SQL错误管理】

  测试

  能够在【App/Common/config.php】中布置日志文件目录。 若是不开展安插, 暗许记录在App/log/目录中

图片 40图片 41

 1 <?php 2 /** 3  * 配置文件 4  * User: young 5  */ 6 return [ 7     //数据库连接配置 8     。。。 9 、 。。。10     。。。11 12     //日志文件位置配置13     'log' => APP,14 ];

点击查阅

  以下测量试验能够 开启配置项中的配置log 和停业后分别测试。 注意: 若无做陈设log, 则要首先在App目录下成立三个log目录

   1. 在布置文件中有意识写错数据库连接消息,如密码写错

图片 42

   2. 执行sql错误

图片 43

末尾证实: 配置目录,日志目录都以不愿意浏览器直接待上访谈的,所以须要将.htaccess文件放入目录中 (由于App目录中曾经存在,故也能够省略)

提交传送代码

git add -Agit commit -m "完成日志类"git checkout mastergit merge start-admin-modulegit push origin master

总括: 本篇重要实现了 框架清理,博客数据库表搭建,创制布局读取类,日志记录类。

    实际上,到此依然只是特别健全了弹指间架构,扩大了2个效能。正如前篇所提,还应该有十分多是能够革新的。这里就临时不再接续追加效果与利益了。

提议难点:

  1. 怎么使用该自制框架搭建项目 ==> 客户操作+mvc达成

  2. 哪些入手接纳ajax实现后台登陆功效 ==> ajax应用

  3. 怎么出手落成分类模块作用,它有哪些操作 ==> 增加和删除改查

下一步: 后台模板视图制作,后台登入,小说分类模块功能。

本文由王中王开奖结果发布于网络编程,转载请注明出处:从零开始打造自己的PHP框架,配置文件

关键词:

上一篇:数据库之mysql建表的片段发令,第十二课
下一篇:没有了