美文网首页PHP经验分享
从零开始打造自己的PHP框架——第3章

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

作者: VoidKing | 来源:发表于2017-09-13 21:59 被阅读47次

    目标

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

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

    调整项目结构

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

    加载配置类

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

    conf.php

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

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

    <?php
    
    return array(
        'CTRL'=>'index',
        'ACTION'=>'index'
    );
    
    <?php
    
    return array(
        'DSN'=>'mysql:host=localhost;dbname=vkphp',
        'USER'=>'root',
        'PASSWD'=>''
    );
    

    使用

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

    <?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');
            // 其他不变
    }
    
    <?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文件,内容如下:

    <?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中,添加:

    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 ,然后修改时区为:

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

    相关文章

      网友评论

        本文标题:从零开始打造自己的PHP框架——第3章

        本文链接:https://www.haomeiwen.com/subject/xtalsxtx.html