mirror of
http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore.git
synced 2026-01-15 05:55:12 +08:00
feat(xml): 增加了 xml 生成的方法及测试用例
This commit is contained in:
2
.idea/HDK-Core.iml
generated
2
.idea/HDK-Core.iml
generated
@@ -147,8 +147,10 @@
|
|||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/guzzle" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/guzzle" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/collection" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/collection" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/db" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/pipeline" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/pipeline" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/tappable" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/tappable" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/serializer" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
|||||||
2
.idea/php.xml
generated
2
.idea/php.xml
generated
@@ -165,6 +165,8 @@
|
|||||||
<path value="$PROJECT_DIR$/vendor/hyperf/pipeline" />
|
<path value="$PROJECT_DIR$/vendor/hyperf/pipeline" />
|
||||||
<path value="$PROJECT_DIR$/vendor/hyperf/collection" />
|
<path value="$PROJECT_DIR$/vendor/hyperf/collection" />
|
||||||
<path value="$PROJECT_DIR$/vendor/hyperf/tappable" />
|
<path value="$PROJECT_DIR$/vendor/hyperf/tappable" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/hyperf/db" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/symfony/serializer" />
|
||||||
</include_path>
|
</include_path>
|
||||||
</component>
|
</component>
|
||||||
<component name="PhpProjectSharedConfiguration" php_language_level="8.0" />
|
<component name="PhpProjectSharedConfiguration" php_language_level="8.0" />
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
"hyperf/context": "^3.0.0",
|
"hyperf/context": "^3.0.0",
|
||||||
"hyperf/di": "^3.0.0",
|
"hyperf/di": "^3.0.0",
|
||||||
"hyperf/framework": "^3.0.0",
|
"hyperf/framework": "^3.0.0",
|
||||||
"hyperf/http-server": "3.0.*",
|
|
||||||
"hyperf/logger": "^3.0.0",
|
"hyperf/logger": "^3.0.0",
|
||||||
"hyperf/redis": "^3.0.0",
|
"hyperf/redis": "^3.0.0",
|
||||||
"hyperf/resource": "^3.0.0",
|
"hyperf/resource": "^3.0.0",
|
||||||
@@ -39,11 +38,15 @@
|
|||||||
"teapot/status-code": "^1.1"
|
"teapot/status-code": "^1.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
"ext-dom": "*",
|
||||||
|
"ext-libxml": "*",
|
||||||
"alibabacloud/dysmsapi-20170525": "^2.0",
|
"alibabacloud/dysmsapi-20170525": "^2.0",
|
||||||
"firebase/php-jwt": "^6.1",
|
"firebase/php-jwt": "^6.1",
|
||||||
"friendsofphp/php-cs-fixer": "^3.13",
|
"friendsofphp/php-cs-fixer": "^3.13",
|
||||||
"guzzlehttp/guzzle": "^7.5",
|
"guzzlehttp/guzzle": "^7.5",
|
||||||
"hyperf/crontab": "^3.0.0",
|
"hyperf/crontab": "^3.0.0",
|
||||||
|
"hyperf/database": "^3.0.0",
|
||||||
|
"hyperf/db": "^3.0.0",
|
||||||
"hyperf/guzzle": "^3.0.0",
|
"hyperf/guzzle": "^3.0.0",
|
||||||
"hyperf/session": "^3.0.0",
|
"hyperf/session": "^3.0.0",
|
||||||
"hyperf/validation": "^3.0.0",
|
"hyperf/validation": "^3.0.0",
|
||||||
@@ -54,13 +57,15 @@
|
|||||||
"spatie/pest-plugin-test-time": "^1.1",
|
"spatie/pest-plugin-test-time": "^1.1",
|
||||||
"swoole/ide-helper": "*",
|
"swoole/ide-helper": "*",
|
||||||
"symfony/mailer": "^6.0",
|
"symfony/mailer": "^6.0",
|
||||||
"hyperf/database": "^3.0.0",
|
"symfony/serializer": "^6.0"
|
||||||
"hyperf/db": "^3.0.0"
|
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"firebase/php-jwt": "JWT 鉴权必需",
|
"firebase/php-jwt": "JWT 鉴权必需",
|
||||||
"hyperf/session": "^3.0.0",
|
"hyperf/session": "^3.0.0",
|
||||||
"symfony/mailer": "用于发送电子邮件",
|
"symfony/mailer": "用于发送电子邮件",
|
||||||
|
"symfony/serializer": "处理 XML 必需",
|
||||||
|
"ext-dom": "处理 XML 必需",
|
||||||
|
"ext-libxml": "处理 XML 必需",
|
||||||
"hyperf/guzzle": "^3.0.0",
|
"hyperf/guzzle": "^3.0.0",
|
||||||
"alibabacloud/dysmsapi-20170525": "阿里云短信服务必需"
|
"alibabacloud/dysmsapi-20170525": "阿里云短信服务必需"
|
||||||
},
|
},
|
||||||
|
|||||||
930
composer.lock
generated
930
composer.lock
generated
File diff suppressed because it is too large
Load Diff
72
src/Service/XmlService.php
Normal file
72
src/Service/XmlService.php
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* XmlService.php@LuxOP
|
||||||
|
*
|
||||||
|
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||||
|
* Powered by PhpStorm
|
||||||
|
* Created on 2023/4/10
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Singularity\HDK\Core\Service;
|
||||||
|
|
||||||
|
use Symfony\Component\Serializer\Encoder\XmlEncoder;
|
||||||
|
|
||||||
|
class XmlService
|
||||||
|
{
|
||||||
|
private XmlEncoder $service;
|
||||||
|
|
||||||
|
public function __construct(XmlEncoder $encoder)
|
||||||
|
{
|
||||||
|
$this->service = $encoder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param object|array<string, mixed> $data
|
||||||
|
* @param string $xmlRootNodeName
|
||||||
|
* @param bool $xmlFormatOutput 是否格式化
|
||||||
|
* @param string $xmlVersion
|
||||||
|
* @param string $xmlEncoding
|
||||||
|
* @param bool $xmlStandalone 是否添加声明规范的标签到xml
|
||||||
|
* @param bool $xmlTypeCastAttributes
|
||||||
|
* @param bool $asCollection
|
||||||
|
* @param int[] $decoderIgnoredNodeTypes
|
||||||
|
* @param int[] $encoderIgnoredNodeTypes
|
||||||
|
* @param int $loadOptions
|
||||||
|
* @param bool $removeEmptyTags
|
||||||
|
*
|
||||||
|
* @return false|string
|
||||||
|
* @see https://symfony.com/doc/current/components/serializer.html#the-xmlencoder
|
||||||
|
*/
|
||||||
|
public function encode(
|
||||||
|
object|array $data,
|
||||||
|
string $xmlRootNodeName = 'root',
|
||||||
|
bool $xmlFormatOutput = true,
|
||||||
|
string $xmlVersion = '1.0',
|
||||||
|
string $xmlEncoding = 'utf-8',
|
||||||
|
bool $xmlStandalone = false,
|
||||||
|
bool $xmlTypeCastAttributes = true,
|
||||||
|
bool $asCollection = true,
|
||||||
|
array $decoderIgnoredNodeTypes = [XML_PI_NODE, XML_COMMENT_NODE],
|
||||||
|
array $encoderIgnoredNodeTypes = [],
|
||||||
|
int $loadOptions = LIBXML_NONET | LIBXML_NOBLANKS,
|
||||||
|
bool $removeEmptyTags = false
|
||||||
|
): false|string {
|
||||||
|
return $this->service->encode(
|
||||||
|
$data,
|
||||||
|
XmlEncoder::FORMAT,
|
||||||
|
[
|
||||||
|
XmlEncoder::FORMAT_OUTPUT => $xmlFormatOutput,
|
||||||
|
XmlEncoder::VERSION => $xmlVersion,
|
||||||
|
XmlEncoder::ENCODING => $xmlEncoding,
|
||||||
|
XmlEncoder::STANDALONE => $xmlStandalone,
|
||||||
|
XmlEncoder::TYPE_CAST_ATTRIBUTES => $xmlTypeCastAttributes,
|
||||||
|
XmlEncoder::ROOT_NODE_NAME => $xmlRootNodeName,
|
||||||
|
XmlEncoder::AS_COLLECTION => $asCollection,
|
||||||
|
XmlEncoder::DECODER_IGNORED_NODE_TYPES => $decoderIgnoredNodeTypes,
|
||||||
|
XmlEncoder::ENCODER_IGNORED_NODE_TYPES => $encoderIgnoredNodeTypes,
|
||||||
|
XmlEncoder::LOAD_OPTIONS => $loadOptions,
|
||||||
|
XmlEncoder::REMOVE_EMPTY_TAGS => $removeEmptyTags,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
101
tests/Unit/XmlServiceTest.php
Normal file
101
tests/Unit/XmlServiceTest.php
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* XmlServiceTest.php@LuxOP
|
||||||
|
*
|
||||||
|
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||||
|
* Powered by PhpStorm
|
||||||
|
* Created on 2023/4/10
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace HyperfTest\Unit\Common;
|
||||||
|
|
||||||
|
use Singularity\HDK\Core\Service\XmlService;
|
||||||
|
use Symfony\Component\Serializer\Encoder\XmlEncoder;
|
||||||
|
|
||||||
|
$service = new XmlService(new XmlEncoder());
|
||||||
|
|
||||||
|
test(
|
||||||
|
'assert Xml can be encoded',
|
||||||
|
function (array $data, string $expect, string $rootNodeName) use ($service) {
|
||||||
|
$result = $service->encode($data, $rootNodeName);
|
||||||
|
|
||||||
|
expect($result)->toBe($expect);
|
||||||
|
}
|
||||||
|
)->with([
|
||||||
|
'normal' => [
|
||||||
|
'data' => [
|
||||||
|
'@version' => '1.0',
|
||||||
|
'@descripe' => 'Luxcreo',
|
||||||
|
'UserName' => 'zhm',
|
||||||
|
'Email' => 'haimei.zheng@luxcreo.ai',
|
||||||
|
'BiosId' => '420036H32020120279',
|
||||||
|
'validTime' => '2099/03/27',
|
||||||
|
],
|
||||||
|
'expect' => <<<'XML'
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ClientInfo version="1.0" descripe="Luxcreo">
|
||||||
|
<UserName>zhm</UserName>
|
||||||
|
<Email>haimei.zheng@luxcreo.ai</Email>
|
||||||
|
<BiosId>420036H32020120279</BiosId>
|
||||||
|
<validTime>2099/03/27</validTime>
|
||||||
|
</ClientInfo>
|
||||||
|
|
||||||
|
XML
|
||||||
|
,
|
||||||
|
'xmlRootNodeName' => 'ClientInfo',
|
||||||
|
],
|
||||||
|
'normal attribute' => [
|
||||||
|
'data' => [
|
||||||
|
'@version' => '1.0',
|
||||||
|
'@descripe' => 'Luxcreo',
|
||||||
|
'UserName' => 'zhm',
|
||||||
|
'Email' => [
|
||||||
|
'@type' => 'Business',
|
||||||
|
'#' => 'haimei.zheng@luxcreo.ai',
|
||||||
|
],
|
||||||
|
'BiosId' => '420036H32020120279',
|
||||||
|
'validTime' => '2099/03/27',
|
||||||
|
],
|
||||||
|
'expect' => <<<'XML'
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ClientInfo version="1.0" descripe="Luxcreo">
|
||||||
|
<UserName>zhm</UserName>
|
||||||
|
<Email type="Business">haimei.zheng@luxcreo.ai</Email>
|
||||||
|
<BiosId>420036H32020120279</BiosId>
|
||||||
|
<validTime>2099/03/27</validTime>
|
||||||
|
</ClientInfo>
|
||||||
|
|
||||||
|
XML
|
||||||
|
,
|
||||||
|
'ClientInfo',
|
||||||
|
],
|
||||||
|
'normal comment' => [
|
||||||
|
'data' => [
|
||||||
|
'@version' => '1.0',
|
||||||
|
'@descripe' => 'Luxcreo',
|
||||||
|
'UserName' => 'zhm',
|
||||||
|
'Email' => [
|
||||||
|
'@type' => 'Business',
|
||||||
|
'#' => 'haimei.zheng@luxcreo.ai',
|
||||||
|
],
|
||||||
|
'BiosId' => '420036H32020120279',
|
||||||
|
'validTime' => [
|
||||||
|
'#comment' => '到期时间',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'expect' => <<<'XML'
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ClientInfo version="1.0" descripe="Luxcreo">
|
||||||
|
<UserName>zhm</UserName>
|
||||||
|
<Email type="Business">haimei.zheng@luxcreo.ai</Email>
|
||||||
|
<BiosId>420036H32020120279</BiosId>
|
||||||
|
<validTime>
|
||||||
|
<!--到期时间-->
|
||||||
|
</validTime>
|
||||||
|
</ClientInfo>
|
||||||
|
|
||||||
|
XML
|
||||||
|
,
|
||||||
|
'ClientInfo',
|
||||||
|
],
|
||||||
|
]);
|
||||||
Reference in New Issue
Block a user