byjg / anydataset
Anydataset是PHP中的一个不可知数据源抽象层。核心模块。
4.9.2
2024-05-30 15:55 UTC
Requires
- php: >=7.4
- byjg/serializer: 4.9.*
- byjg/xmlutil: 4.9.*
Requires (Dev)
- phpunit/phpunit: ^9.6
- vimeo/psalm: ^4.24
Suggests
- ext-dom: *
README
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