PHP手写MVC (四)—— 配置

通常一个框架会提供一种获取配置文件的操作类,该类的作用是,加载用户自定义配置文件,读取和设置配置文件等操作。

我们规定用户配置文件目录为 origin/app/conf,在该目录下,config.php 是默认的配置文件,此外,还可以在该目录下创建其他配置文件,例如 db.phpserver.php 等,所有其他文件也会被自动加载。

定义规则

配置文件内容直接返回数组。示例

app/conf/config.php

 [
        'controller' => 'index',
        'action' => 'index',
        'router' => 'querystring',
    ],
    'debug' => true,
    'cache' => 'redis',
];

app/conf/db.php

 [
        'host'      => '127.0.0.1',
        'username'  => '',
        'password'  => '',
        'db'        => '',
        'port'      => 3306,
        'charset'   => 'utf8',
        'prefix'    => ''
    ],
    'redis' => [
        'scheme' => '',
        'host'   => '',
        'port'   => '',
    ]
];

使用规则

通过 Config::get($key) 来获取配置。

  • config.php 作为默认配置文件可以直接获取该配置文件内容,多维数组通过.分隔,例如
  • db.php 或其他自定义配置文件,需要添加文件名前缀,例如

Config 类

Config 类主要实现以下功能:

  • 加载用户配置文件
conf = $conf;
    }

由于继承 Container,构造函数只执行一次,因此在 __construct() 中加载配置文件可以避免重复加载。

除了 config.php 外的其他配置文件,需要用文件名作为 key

  • 解析多维 key 和使用默认值
//1
protected function get($key = null, $default=null)
{
    //2
    if (empty($key)) {
        return $this->conf;
    }
    //3
    if (strpos($key, '.')) {
        $conf = $this->conf;
        foreach (explode('.', $key) as $k) {
            $conf = $conf[$k] ?? $default;
        }
        return $conf;
    }
    //4
    return $this->conf[$key] ?? $default;
}
  1. 使用 :: 执行方法时,该方法需要声明为 protected,如 Config::get($key);
  2. 如果 $key 为空,则返回所有配置。
  3. 通过 . 来解析多维数组配置。
  4. 如果为找到对应值,根据是否设置默认值返回结果。

你可能感兴趣的:(php,mvc)