fi1a/config

PHP 处理配置文件。支持 PHP 和 JSON 文件。

2.1.5 2023-02-20 00:42 UTC

This package is auto-updated.

Last update: 2024-09-20 04:03:45 UTC


README

Latest Version Software License PHP Version Coverage Status Total Downloads Support mail

该包是一个配置文件加载器,支持 PHP 和 JSON 格式。

安装

可以使用 Composer 将此包作为依赖项安装。

composer require fi1a/config

配置文件加载和保存示例

可以通过使用 Fi1a\Config\ConfigValuesInterface 对象,该对象可以使用 load() 工厂方法创建,该方法需要传入 Fi1a\Config\Readers\ReaderInterface 对象以从文件中读取,以及 Fi1a\Config\Parsers\ParserInterface 对象以进行解析。

use Fi1a\Config\Config;
use Fi1a\Config\Parsers\PHPParser;
use Fi1a\Config\Readers\FileReader;
use Fi1a\Config\Writers\FileWriter;
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;

$filesystem = new Filesystem(new LocalAdapter(__DIR__));
$file = $filesystem->factoryFile('./config.php');

$reader = new FileReader($file);
$writer = new FileWriter($file);

$parser = new PHPParser();

$config = Config::load($reader, $parser); // Fi1a\Config\ConfigValuesInterface

$config->get('path:to:value', true);
$config->set('path:to:value', 'value');

Config::write($config, $writer, $parser); // true

配置文件加载示例

可以通过使用 Fi1a\Config\Config::batchLoad 方法从多个文件中获取值,并传递一个包含 Fi1a\Config\Readers\ReaderInterface 对象的数组以进行文件读取和 Fi1a\Config\Parsers\ParserInterface 对象以进行解析的数组。

use Fi1a\Config\Config;
use Fi1a\Config\Parsers\PHPParser;
use Fi1a\Config\Readers\FileReader;
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;

$parser = new PHPParser();

$filesystem = new Filesystem(new LocalAdapter(__DIR__));

$config = Config::batchLoad([
    [
        new FileReader($filesystem->factoryFile('./config1.php')),
        $parser,
    ],
    [
        new FileReader($filesystem->factoryFile('./config2.php')),
        $parser,
    ],
    [
        new FileReader($filesystem->factoryFile('./config3.php')),
        $parser,
    ],
]); // Fi1a\Config\ConfigValuesInterface

$config->get('path:to:value', true);

值类

Fi1a\Config\Config::loadFi1a\Config\Config::batchLoad 方法返回实现 Fi1a\Collection\DataType\PathAccessInterface 接口(来自包 fi1a/collection)的 Fi1a\Config\ConfigValues 对象。

该类允许通过路径(foo:bar:baz)访问数组键。

可以使用 Fi1a\Config\Config::create 方法创建新的值对象。

use Fi1a\Config\Config;

$register = Config::create(['foo' => ['bar' => ['baz' => 1], 'qux' => 2,],]);

$register->get('foo:bar:baz'); // 1
$register->get('foo:qux'); // 2
$register->get('foo:bar:baz:bat'); // null
$register->get('foo:bar:baz:bat', false); // false

$register->has('foo:bar'); // true
$register->has('foo:bar:baz'); // true
$register->has('foo:bar:baz:bat'); // false

读取

负责读取配置的类实现了 Fi1a\Config\Readers\ReaderInterface 接口。

读取配置文件

Fi1a\Config\Readers\FileReader 类从文件中读取编码字符串。

use Fi1a\Config\Config;
use Fi1a\Config\Parsers\PHPParser;
use Fi1a\Config\Readers\FileReader;
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;

$filesystem = new Filesystem(new LocalAdapter(__DIR__));

$reader = new FileReader($filesystem->factoryFile('./config.php'));
$parser = new PHPParser();

$config = Config::load($reader, $parser); // Fi1a\Config\ConfigValuesInterface

$config->get('path:to:value', true);
$config->set('path:to:value', 'value');

从目录中读取配置文件

Fi1a\Config\Readers\DirectoryReader 类根据提供的掩码从传入的目录中读取配置文件。构造函数参数

use Fi1a\Config\Config;
use Fi1a\Config\Parsers\PHPParser;
use Fi1a\Config\Readers\DirectoryReader;
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;

$filesystem = new Filesystem(new LocalAdapter(__DIR__));

$reader = new DirectoryReader($filesystem->factoryFolder('.'), '/^(.+)\.config\.php$/');
$parser = new PHPParser();

$config = Config::load($reader, $parser); // Fi1a\Config\ConfigValuesInterface

$config->get('path:to:value', true);
$config->set('path:to:value', 'value');

写入

负责写入配置的类实现了 Fi1a\Config\Writers\WriterInterface 接口。

写入配置文件

Fi1a\Config\Writers\FileWriter 类将编码字符串写入文件。

use Fi1a\Config\Config;
use Fi1a\Config\Parsers\PHPParser;
use Fi1a\Config\Writers\FileWriter;
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;

$filesystem = new Filesystem(new LocalAdapter(__DIR__));

$writer = new FileWriter($filesystem->factoryFile('./config.php'));

$parser = new PHPParser();

$config = Config::create(['foo' => 'bar', 'baz' => [1, 2, 3]]);

Config::write($config, $writer, $parser); // true

编码

负责编码配置的类实现了 Fi1a\Config\Parsers\ParserInterface 接口。

基于文件类型创建解析器对象

可以使用 Fi1a\Config\Parsers\Factory::byFileType 工厂方法根据文件扩展名获取解析器对象。

use Fi1a\Config\Config;
use Fi1a\Config\Parsers\Factory;
use Fi1a\Config\Readers\FileReader;
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;

$filesystem = new Filesystem(new LocalAdapter(__DIR__));

$file = $filesystem->factoryFile('./config.json');
$reader = new FileReader($file);
$parser = Factory::byFileType($file->getPath()); // Fi1a\Config\Parsers\JSONParser

$config = Config::load($reader, $parser); // Fi1a\Config\ConfigValuesInterface

$config->get('path:to:value', true);

PHP 格式编码

要使用 PHP 格式进行编码,请使用 Fi1a\Config\Parsers\PHPParser 类。可以在构造函数中传递以下参数

示例

use Fi1a\Config\Config;
use Fi1a\Config\Parsers\PHPParser;
use Fi1a\Config\Readers\FileReader;
use Fi1a\Config\Writers\FileWriter;
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;

$filesystem = new Filesystem(new LocalAdapter(__DIR__));

$file = $filesystem->factoryFile('./config.php');
$reader = new FileReader($file);
$writer = new FileWriter($file);
$parser = new PHPParser('UTF-8', false, '1tab');

$config = Config::load($reader, $parser); // Fi1a\Config\ConfigValuesInterface

$config->get('path:to:value', true);
$config->set('path:to:value', 'value');

Config::write($config, $writer, $parser); // true

JSON 格式编码

要使用 JSON 格式进行编码,请使用 Fi1a\Config\Parsers\JSONParser 类。可以在构造函数中传递以下参数

示例

use Fi1a\Config\Config;
use Fi1a\Config\Parsers\JSONParser;
use Fi1a\Config\Readers\FileReader;
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;

$filesystem = new Filesystem(new LocalAdapter(__DIR__));

$reader = new FileReader($filesystem->factoryFile('./config.json'));
$parser = new JSONParser(64, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);

$config = Config::load($reader, $parser); // Fi1a\Config\ConfigValuesInterface

$config->get('path:to:value', true);
$config->set('path:to:value', 'value');