exorg/data-coder

可扩展的通用数据和数据文件解码器/编码器。

2.0.0 2023-11-26 16:00 UTC

This package is not auto-updated.

Last update: 2024-09-21 19:30:09 UTC


README

example workflow

可扩展的数据和文件编码解码器集。它允许将PHP数组转换为数据字符串和数据文件,反之亦然,可以选择如YAML和JSON等格式。它提供了各种解码和编码机制的封装,统一了接口和异常处理。

存在各种解码器和编码器组

  • 具有预定义的数据格式 - 例如 Coder\Json\Data\DecoderCoder\Yaml\Datafile\Encoder
  • 具有可配置的数据格式 - 例如 Coder\Data\DecoderCoder\Datafile\Encoder
  • 用于原始数据 - 例如 Coder\Json\Data\DecoderCoder\Data\Encoder
  • 用于文件中的数据 - 例如 Coder\Yaml\Datafile\EncoderCoder\Datafile\Decoder

入门指南

先决条件

说明假设使用Linux操作系统或兼容其他操作系统的工具。

安装

需要php8.*-cli,Git和Composer

将DataCoder安装到项目源代码中,推荐的方式是将它作为代码依赖通过Composer处理。需要Git从版本控制仓库中获取包。

需要php8.*-cli来安装Composer。

DataCoder安装

通过运行以下命令在您的composer.json文件中添加适当的条目

composer require exorg/data-coder

如果处于项目设置阶段且尚未安装任何依赖项,请运行

composer install

如果之前已安装了其他依赖项,请运行

composer update

用法

在可执行文件中自动加载所有必需文件的最简单方法是附加由Composer生成的autoload.php文件(在运行composer installcomposer update命令后),如下面的示例所示

require_once (__DIR__ . '/vendor/autoload.php');

具有预定义格式的数据编码器

use ExOrg\DataCoder\Coder\Json\Data\Encoder;

$data = [
    "firstName" => "John",
    "lastName" => "Smith",
    "address" => [
        "streetAddress" => "21 2nd Street",
        "city" => "New York",
        "state" => "NY",
        "postalCode" => "10021-3100",
    ],
];

$encoder = new Encoder();
$result = $encoder->encodeData($data);

print($result);
{
    "firstName": "John",
    "lastName": "Smith",
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021-3100"
    }
}

具有预定义格式的数据解码器

use ExOrg\DataCoder\Coder\Yaml\Data\Decoder;

$data = '
firstName: John
lastName: Smith
address:
  streetAddress: 21 2nd Street
  city: New York
  state: NY
  postalCode: 10021-3100
';

$decoder = new Decoder();
$result = $decoder->decodeData($data);

print_r($result);
Array
(
    [firstName] => John
    [lastName] => Smith
    [address] => Array
        (
            [streetAddress] => 21 2nd Street
            [city] => New York
            [state] => NY
            [postalCode] => 10021-3100
        )

)

具有可配置格式的数据编码器

use ExOrg\DataCoder\Coder\Data\Encoder;

$data = [
    "firstName" => "John",
    "lastName" => "Smith",
    "address" => [
        "streetAddress" => "21 2nd Street",
        "city" => "New York",
        "state" => "NY",
        "postalCode" => "10021-3100",
    ],
];

$encoder = new Encoder();
$encoder->setDataFormat('yaml');
$result = $encoder->encodeData($data);

print($result);
firstName: John
lastName: Smith
address:
    streetAddress: '21 2nd Street'
    city: 'New York'
    state: NY
    postalCode: 10021-3100

具有可配置格式的数据解码器

use ExOrg\DataCoder\Coder\Data\Decoder;

$data = '
{
    "firstName": "John",
    "lastName": "Smith",
    "isAlive": true,
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021-3100"
    }
}
';

$decoder = new Decoder();
$decoder->setDataFormat('json');
$result = $decoder->decodeData($data);

print_r($result);
Array
(
    [firstName] => John
    [lastName] => Smith
    [isAlive] => 1
    [address] => Array
        (
            [streetAddress] => 21 2nd Street
            [city] => New York
            [state] => NY
            [postalCode] => 10021-3100
        )

)

数据文件编码器和解码器

数据文件编码器和解码器的用法与数据编码器和解码器类似。存在具有预定义数据格式(如 Coder\Json\Datafile\EncoderCoder\Yaml\Datafile\Decoder)的编码器,以及可以通过函数 setDataFormat 选择数据格式的编码器,就像上面的示例一样 - Code\Datafile\EncoderCode\Datafile\Decoder

通过文件扩展名识别数据格式

具有可配置数据格式的数据文件编码器 - Coder\Datafile\EncoderCoder\Datafile\Decoder - 可以通过文件扩展名识别数据格式。在这种情况下,无需手动设置数据格式。

数据文件编码器
use ExOrg\DataCoder\Coder\Datafile\Encoder;

$data = [
    "firstName" => "John",
    "lastName" => "Smith",
    "address" => [
        "streetAddress" => "21 2nd Street",
        "city" => "New York",
        "state" => "NY",
        "postalCode" => "10021-3100",
    ],
];

$datafilePath = 'data.json';

$encoder = new Encoder();
$encoder->encodeFile($data, $datafilePath);

print file_get_contents($datafilePath);
{
    "firstName": "John",
    "lastName": "Smith",
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021-3100"
    }
}
数据文件解码器
use ExOrg\DataCoder\Coder\Datafile\Decoder;

$datafilePath = 'data.yaml';

print file_get_contents($datafilePath);

$decoder = new Decoder();
$data = $decoder->decodeFile($datafilePath);

print_r($data);
firstName: John
lastName: Smith
address:
    streetAddress: '21 2nd Street'
    city: 'New York'
    state: NY
    postalCode: 10021-3100
Array
(
    [firstName] => John
    [lastName] => Smith
    [address] => Array
        (
            [streetAddress] => 21 2nd Street
            [city] => New York
            [state] => NY
            [postalCode] => 10021-3100
        )

)

测试

单元测试

该项目具有单元测试,它使用PHPUnit框架构建,并在Linux操作系统上运行。

要运行测试,在主DataCoder项目目录中写入以下命令行

vendor/bin/phpunit tests/

或使用Composer脚本

composer test

代码风格测试

此代码遵循PSR-1PSR-12标准。

要运行代码风格测试,在主DataCoder项目目录中写入以下命令行

vendor/bin/phpcs tests/ src/

或使用Composer脚本

composer sniff

您也可以使用Composer脚本来同时运行测试并检查代码风格

composer check

构建于

版本控制

本项目根据 SemVer 版本控制标准进行版本控制。所有可用的 发布版本标记

贡献

请阅读 CONTRIBUTING.md 以获取行为准则和提交拉取请求的详细过程。

作者

许可证

本项目采用MIT许可证 - 有关详细信息,请参阅 LICENSE.md 文件。