1. 目标
本篇,我们的目标有三个:
2. 调整项目结构
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包含静态资源文件。
3. 加载配置类
我们之前的路由配置、数据库配置都是写在程序中的,修改起来不方便,下面我们把这些配置都放在配置文件中。
3.1. 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){
$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); } } }
|
3.2. 配置类
在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'=>'' );
|
3.3. 使用
修改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(){
$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); }catch (\Exception $e){ echo $e->getMessage(); } } }
|
4. 添加日志类
4.1. 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)); } }
|
4.2. 使用
在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');
。
5. 源码分享
https://github.com/voidking/vkphp/releases/tag/v1.3.0
6. 书签
从零开始打造自己的PHP框架