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

目标

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

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

调整项目结构

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框架

0%