byjg/anydataset

Anydataset是PHP中的一个不可知数据源抽象层。核心模块。

资助包维护!
byjg

4.9.2 2024-05-30 15:55 UTC

README

Opensource ByJG Build Status Opensource ByJG GitHub source GitHub license GitHub release

Anydataset核心模块。Anydataset是PHP中的一个不可知数据源抽象层。

特性

  • 使用相同的接口访问不同的数据源。
  • 可迭代结果
  • 将结果转换为数组

当前实现

示例

使用foreach迭代

<?php
$dataset = new \ByJG\AnyDataset\Core\AnyDataset("example");

$iterator = $dataset->getIterator();
foreach ($iterator as $row) {
    print $row->toArray();
}

过滤结果

<?php
$filter = new \ByJG\AnyDataset\Core\IteratorFilter();
$filter->addRelation("field1", \ByJG\AnyDataset\Core\Enum\Relation::EQUAL, 10);
$iterator2 = $dataset->getIterator($filter);

转换为数组

<?php
$iterator = $dataset->getIterator();
print_r($iterator->toArray());

使用while迭代

<?php
$iterator = $dataset->getIterator();
while ($iterator->hasNext()) {
    $row = $iterator->moveNext();

    print_r($row->get("field1"));
}

foreach ($iterator as $row) {
    print_r($row->get("field1"));
}

附加类

RowOutpout - 格式化字段输出

此类定义了字段输出的自定义格式。

<?php
$output = RowOutput::getInstance()
    ->addFormat("field1", "Test {field1}")
    ->addFormat("field2", "Showing {} and {field3}");
    ->addCustomFormat("field3", function ($row, $field, $value) {
        // return the formatted output.
        // $row: The row object with all values
        // $field: The field has been processed
        // $value: The field value
    });

// This will output the field1 formatted:
echo $output->print($row, "field1");

// This will apply the format defintion to all fields at once:
$ouput->apply($row);

关于格式模式的说明

  • {}表示当前值
  • {.}表示字段名
  • {field_name}返回 $row->get(field_name) 的值

RowValidator - 验证字段内容

<?php
$validator = RowValidator::getInstance()
    ->requiredFields(["field1", "field2"])
    ->numericFields(['field1', 'field3'])
    ->regexValidation("field4", '/\d{4}-\d{2}-\d{2}/')
    ->customValidation("field3", function($value) {
        // Return any string containing the error message if validation FAILS
        // otherwise, just return null and the valition will pass.
    });

$validator->validate($row) // Will return an array with the error messages. Empty array if not errors.

格式化器

AnyDataset附带一组可扩展的格式化器,用于格式化AnyDataset。接口是

namespace ByJG\AnyDataset\Core\Formatter;

interface FormatterInterface
{
    /**
     * Return the object in your original format, normally as object
     *
     * @return mixed
     */
    public function raw();

    /**
     * Return the object transformed to string.
     *
     * @return string
     */
    public function toText();

    /**
     * Save the contents to a file
     *
     * @param string $filename
     * @return void
     */
    public function saveToFile($filename);
}

AnyDataset实现了两个格式化器

  • JsonFormatter
  • XmlFormatter

示例

<?php
$formatter = new XmlFormatter($anydataset->getIterator());
$formatter->raw(); // Return a DOM object
$formatter->toText(); // Return the XML as a text
$formatter->saveToFile("/path/to/file.xml");  // Save the XML Text to a file.

安装

composer require "byjg/anydataset"

运行单元测试

vendor/bin/phpunit

依赖关系

开源ByJG