从零开始打造自己的PHP框架——第3章

文章目录
  1. 1. 目标
  2. 2. 调整项目结构
  3. 3. 加载配置类
    1. 3.1. conf.php
    2. 3.2. 配置类
    3. 3.3. 使用
  4. 4. 添加日志类
    1. 4.1. log.php
    2. 4.2. 使用
  5. 5. 源码分享
  6. 6. 书签

目标

本篇,我们的目标有三个:

  • 调整项目结构
  • 加载配置类
  • 添加日志类

调整项目结构

1
2
3
4
5
6
7
8
9
10
11
vkphp
├─app
│ ├─ctrl
│ ├─model
│ ├─smarty
│ └─view
├─config
├─core
├─lib
├─log
└─public
  • app内包含控制器、数据库model、smarty模板、普通渲染模板。
  • config内包含全局配置文件。
  • core内包含框架的核心文件。
  • lib内包含第三方库。
  • log内存放日志文件。
  • public包含静态资源文件。

加载配置类

我们之前的路由配置、数据库配置都是写在程序中的,修改起来不方便,下面我们把这些配置都放在配置文件中。

conf.php

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

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
<?php

namespace 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){
$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
2
3
4
5
6
<?php

return array(
'CTRL'=>'index',
'ACTION'=>'index'
);

1
2
3
4
5
6
7
<?php

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

使用

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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 = \core\conf::get('CTRL','route_config');
$this->action = \core\conf::get('ACTION','route_config');
// 其他不变
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
namespace core;

class db extends \PDO{
public function __construct(){
$conf = \core\conf::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();
}
}
}

添加日志类

log.php

在core目录,添加log.php文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
<?php

namespace core;

class log{

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

使用

在indexCtrl.php中,添加:

1
2
3
4
5
public function log(){
$log = new \core\log();
$log->log('this is log','log_test');
echo '成功写入日志';
}

访问 http://vkphp.dev/index/log ,即可在log目录下生成日志文件。
如果时间不正确,就在php.ini中搜索 date.timezone ,然后修改时区为:

1
data.timezone="Asia/Shanghai"

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

源码分享

https://github.com/voidking/vkphp/releases/tag/v1.3.0

书签

从零开始打造自己的PHP框架