mirror of
http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore.git
synced 2026-01-15 05:35:09 +08:00
Compare commits
6 Commits
v1.0.0-alp
...
v1.0.0-alp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f34b2c9e21 | ||
|
|
eee68cab8a | ||
|
|
c93ed73f10 | ||
|
|
97848a5e22 | ||
|
|
b7d0dd87c5 | ||
|
|
26b55f1ca5 |
170
.idea/HDK-Core.iml
generated
170
.idea/HDK-Core.iml
generated
@@ -5,6 +5,176 @@
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="Singularity\HDK\Core\" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" packagePrefix="Singularity\HDK\Test\Core\" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/runtime" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/adbario/php-dot-notation" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/alibabacloud/credentials" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/alibabacloud/darabonba-openapi" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/alibabacloud/dysmsapi-20170525" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/alibabacloud/endpoint-util" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/alibabacloud/gateway-spi" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/alibabacloud/openapi-util" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/alibabacloud/tea" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/alibabacloud/tea-utils" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/alibabacloud/tea-xml" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/deprecations" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/inflector" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/instantiator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/lexer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/egulias/email-validator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/ergebnis/http-method" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/fig/http-message-util" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filp/whoops" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/firebase/php-jwt" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/friendsofphp/php-cs-fixer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/graham-campbell/result-type" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/guzzle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/promises" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/psr7" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/code-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/codec" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/collection" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/conditionable" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/config" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/constants" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/context" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/contract" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/coordinator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/coroutine" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/crontab" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/database" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/db" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/di" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/dispatcher" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/engine" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/engine-contract" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/event" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/exception-handler" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/framework" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/guzzle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/http-message" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/http-server" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/logger" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/macroable" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/paginator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/pipeline" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/pool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/redis" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/resource" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/serializer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/server" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/session" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/stringable" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/support" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/tappable" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/translation" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/utils" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/validation" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/jetbrains/phpstorm-attributes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/justinrainbow/json-schema" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laminas/laminas-mime" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laminas/laminas-stdlib" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/lizhichao/one-sm" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/lmc/http-constants" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/php-enum" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nesbot/carbon" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nikic/fast-route" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nunomaduro/collision" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/pestphp/pest" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/pestphp/pest-plugin" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/manifest" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/version" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/php-di/phpdoc-reader" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpoption/phpoption" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpstan/phpstan" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-code-coverage" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-file-iterator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-invoker" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-text-template" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-timer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/phpunit" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/clock" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/event-dispatcher" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-client" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-factory" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-message" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-server-handler" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-server-middleware" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/ralouphie/getallheaders" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/react/promise" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/roave/dont" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/cli-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/comparator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/complexity" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/diff" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/environment" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/exporter" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/global-state" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/lines-of-code" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-enumerator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-reflector" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/recursion-context" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/type" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/version" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/seld/jsonlint" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/seld/phar-utils" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/seld/signal-handler" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/pest-plugin-test-time" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/test-time" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/swoole/ide-helper" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/console" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/deprecation-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/filesystem" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/finder" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/mailer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/mime" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/options-resolver" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-grapheme" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-idn" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-normalizer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php72" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php73" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php80" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php81" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php83" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/process" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/serializer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/service-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/stopwatch" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/string" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/teapot/status-code" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/theseer/tokenizer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/vlucas/phpdotenv" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/brianium/paratest" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/fidry/cpu-core-counter" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/friendsofhyperf/pest-plugin-hyperf" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/friendsofhyperf/rector" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/stdlib" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/testing" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/jean85/pretty-package-versions" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nunomaduro/termwind" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/pestphp/pest-plugin-arch" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-common" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-docblock" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/type-resolver" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpstan/phpdoc-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/rector/rector" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/swow/psr7-plus" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/ta-tikoma/phpunit-architecture-test" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/webmozart/assert" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
|
||||
174
.idea/php.xml
generated
174
.idea/php.xml
generated
@@ -18,6 +18,180 @@
|
||||
<component name="PhpExternalFormatter">
|
||||
<option name="externalFormatter" value="PHP_CBF" />
|
||||
</component>
|
||||
<component name="PhpIncludePathManager">
|
||||
<include_path>
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/pool" />
|
||||
<path value="$PROJECT_DIR$/vendor/doctrine/inflector" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/event" />
|
||||
<path value="$PROJECT_DIR$/vendor/doctrine/instantiator" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/validation" />
|
||||
<path value="$PROJECT_DIR$/vendor/doctrine/deprecations" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/guzzle" />
|
||||
<path value="$PROJECT_DIR$/vendor/ergebnis/http-method" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/session" />
|
||||
<path value="$PROJECT_DIR$/vendor/firebase/php-jwt" />
|
||||
<path value="$PROJECT_DIR$/vendor/nesbot/carbon" />
|
||||
<path value="$PROJECT_DIR$/vendor/jetbrains/phpstorm-attributes" />
|
||||
<path value="$PROJECT_DIR$/vendor/php-di/phpdoc-reader" />
|
||||
<path value="$PROJECT_DIR$/vendor/lizhichao/one-sm" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpoption/phpoption" />
|
||||
<path value="$PROJECT_DIR$/vendor/ralouphie/getallheaders" />
|
||||
<path value="$PROJECT_DIR$/vendor/swoole/ide-helper" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/comparator" />
|
||||
<path value="$PROJECT_DIR$/vendor/teapot/status-code" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/global-state" />
|
||||
<path value="$PROJECT_DIR$/vendor/vlucas/phpdotenv" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/object-enumerator" />
|
||||
<path value="$PROJECT_DIR$/vendor/adbario/php-dot-notation" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/object-reflector" />
|
||||
<path value="$PROJECT_DIR$/vendor/egulias/email-validator" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/complexity" />
|
||||
<path value="$PROJECT_DIR$/vendor/laminas/laminas-mime" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
|
||||
<path value="$PROJECT_DIR$/vendor/laminas/laminas-stdlib" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/diff" />
|
||||
<path value="$PROJECT_DIR$/vendor/monolog/monolog" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/recursion-context" />
|
||||
<path value="$PROJECT_DIR$/vendor/myclabs/php-enum" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/lines-of-code" />
|
||||
<path value="$PROJECT_DIR$/vendor/myclabs/deep-copy" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/type" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/version" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/cli-parser" />
|
||||
<path value="$PROJECT_DIR$/vendor/phar-io/manifest" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/code-unit" />
|
||||
<path value="$PROJECT_DIR$/vendor/phar-io/version" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/environment" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpstan/phpstan" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/exporter" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/php-timer" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/phpunit" />
|
||||
<path value="$PROJECT_DIR$/vendor/guzzlehttp/promises" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/php-text-template" />
|
||||
<path value="$PROJECT_DIR$/vendor/guzzlehttp/psr7" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/php-code-coverage" />
|
||||
<path value="$PROJECT_DIR$/vendor/guzzlehttp/guzzle" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/php-invoker" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/php-file-iterator" />
|
||||
<path value="$PROJECT_DIR$/vendor/alibabacloud/tea-xml" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php73" />
|
||||
<path value="$PROJECT_DIR$/vendor/alibabacloud/darabonba-openapi" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/serializer" />
|
||||
<path value="$PROJECT_DIR$/vendor/alibabacloud/openapi-util" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php80" />
|
||||
<path value="$PROJECT_DIR$/vendor/alibabacloud/tea" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-ctype" />
|
||||
<path value="$PROJECT_DIR$/vendor/alibabacloud/tea-utils" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php81" />
|
||||
<path value="$PROJECT_DIR$/vendor/alibabacloud/gateway-spi" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php72" />
|
||||
<path value="$PROJECT_DIR$/vendor/alibabacloud/endpoint-util" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/translation" />
|
||||
<path value="$PROJECT_DIR$/vendor/alibabacloud/dysmsapi-20170525" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/translation-contracts" />
|
||||
<path value="$PROJECT_DIR$/vendor/alibabacloud/credentials" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher" />
|
||||
<path value="$PROJECT_DIR$/vendor/friendsofphp/php-cs-fixer" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/mailer" />
|
||||
<path value="$PROJECT_DIR$/vendor/justinrainbow/json-schema" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/filesystem" />
|
||||
<path value="$PROJECT_DIR$/vendor/graham-campbell/result-type" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/options-resolver" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-idn" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-normalizer" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher-contracts" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/finder" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php83" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/stopwatch" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/mime" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/string" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/deprecation-contracts" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/service-contracts" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/http-foundation" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/process" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/console" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-grapheme" />
|
||||
<path value="$PROJECT_DIR$/vendor/theseer/tokenizer" />
|
||||
<path value="$PROJECT_DIR$/vendor/composer" />
|
||||
<path value="$PROJECT_DIR$/vendor/fig/http-message-util" />
|
||||
<path value="$PROJECT_DIR$/vendor/lmc/http-constants" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/http-server-handler" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/event-dispatcher" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/http-server-middleware" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/http-message" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/container" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/http-client" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/log" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/clock" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/http-factory" />
|
||||
<path value="$PROJECT_DIR$/vendor/seld/phar-utils" />
|
||||
<path value="$PROJECT_DIR$/vendor/seld/jsonlint" />
|
||||
<path value="$PROJECT_DIR$/vendor/seld/signal-handler" />
|
||||
<path value="$PROJECT_DIR$/vendor/nikic/php-parser" />
|
||||
<path value="$PROJECT_DIR$/vendor/nikic/fast-route" />
|
||||
<path value="$PROJECT_DIR$/vendor/react/promise" />
|
||||
<path value="$PROJECT_DIR$/vendor/roave/dont" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/database" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/pipeline" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/contract" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/collection" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/coordinator" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/serializer" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/di" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/context" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/logger" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/tappable" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/http-server" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/coroutine" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/translation" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/framework" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/config" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/redis" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/constants" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/codec" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/crontab" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/dispatcher" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/server" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/utils" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/http-message" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/exception-handler" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/code-parser" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/conditionable" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/engine-contract" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/support" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/macroable" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/db" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/resource" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/paginator" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/engine" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/stringable" />
|
||||
<path value="$PROJECT_DIR$/vendor/doctrine/lexer" />
|
||||
<path value="$PROJECT_DIR$/vendor/swow/psr7-plus" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/stdlib" />
|
||||
<path value="$PROJECT_DIR$/vendor/hyperf/testing" />
|
||||
<path value="$PROJECT_DIR$/vendor/pestphp/pest-plugin" />
|
||||
<path value="$PROJECT_DIR$/vendor/pestphp/pest" />
|
||||
<path value="$PROJECT_DIR$/vendor/pestphp/pest-plugin-arch" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpstan/phpdoc-parser" />
|
||||
<path value="$PROJECT_DIR$/vendor/webmozart/assert" />
|
||||
<path value="$PROJECT_DIR$/vendor/brianium/paratest" />
|
||||
<path value="$PROJECT_DIR$/vendor/fidry/cpu-core-counter" />
|
||||
<path value="$PROJECT_DIR$/vendor/nunomaduro/termwind" />
|
||||
<path value="$PROJECT_DIR$/vendor/nunomaduro/collision" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-common" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpdocumentor/type-resolver" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-docblock" />
|
||||
<path value="$PROJECT_DIR$/vendor/filp/whoops" />
|
||||
<path value="$PROJECT_DIR$/vendor/ta-tikoma/phpunit-architecture-test" />
|
||||
<path value="$PROJECT_DIR$/vendor/jean85/pretty-package-versions" />
|
||||
<path value="$PROJECT_DIR$/vendor/friendsofhyperf/pest-plugin-hyperf" />
|
||||
<path value="$PROJECT_DIR$/vendor/rector/rector" />
|
||||
<path value="$PROJECT_DIR$/vendor/friendsofhyperf/rector" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/test-time" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/pest-plugin-test-time" />
|
||||
</include_path>
|
||||
</component>
|
||||
<component name="PhpProjectSharedConfiguration" php_language_level="8.1" />
|
||||
<component name="PhpStan">
|
||||
<PhpStan_settings>
|
||||
|
||||
18
.idea/phpspec.xml
generated
18
.idea/phpspec.xml
generated
@@ -26,6 +26,24 @@
|
||||
<PhpSpecSuiteConfiguration>
|
||||
<option name="myPath" value="$PROJECT_DIR$" />
|
||||
</PhpSpecSuiteConfiguration>
|
||||
<PhpSpecSuiteConfiguration>
|
||||
<option name="myPath" value="$PROJECT_DIR$" />
|
||||
</PhpSpecSuiteConfiguration>
|
||||
<PhpSpecSuiteConfiguration>
|
||||
<option name="myPath" value="$PROJECT_DIR$" />
|
||||
</PhpSpecSuiteConfiguration>
|
||||
<PhpSpecSuiteConfiguration>
|
||||
<option name="myPath" value="$PROJECT_DIR$" />
|
||||
</PhpSpecSuiteConfiguration>
|
||||
<PhpSpecSuiteConfiguration>
|
||||
<option name="myPath" value="$PROJECT_DIR$" />
|
||||
</PhpSpecSuiteConfiguration>
|
||||
<PhpSpecSuiteConfiguration>
|
||||
<option name="myPath" value="$PROJECT_DIR$" />
|
||||
</PhpSpecSuiteConfiguration>
|
||||
<PhpSpecSuiteConfiguration>
|
||||
<option name="myPath" value="$PROJECT_DIR$" />
|
||||
</PhpSpecSuiteConfiguration>
|
||||
</suites>
|
||||
</component>
|
||||
</project>
|
||||
20
CHANGELOG.md
20
CHANGELOG.md
@@ -1,4 +1,24 @@
|
||||
# 版本更新日志
|
||||
## [1.0.0-alpha.16](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/compare/v1.0.0-alpha.15...v1.0.0-alpha.16) (2023-12-04)
|
||||
|
||||
|
||||
### ♻️ Code Refactoring | 代码重构
|
||||
|
||||
* 迁移到 hyperf3.1和 pestphp2 ([eee68ca](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/commit/eee68cab8a06833114ae19dc2c746dcd50206cb4))
|
||||
|
||||
## [1.0.0-alpha.15](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/compare/v1.0.0-alpha.14...v1.0.0-alpha.15) (2023-10-30)
|
||||
|
||||
|
||||
### 📦 Build System | 打包构建
|
||||
|
||||
* **composer:** 更新依赖 ([26b55f1](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/commit/26b55f1ca5acb8b1bac3d4c23c7154a33ba1b5e6))
|
||||
|
||||
|
||||
### ✅ Tests | 测试
|
||||
|
||||
* **request:** 修复了无法使用的测试用例 ([b7d0dd8](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/commit/b7d0dd87c5ef110c581df74ff9e1e8987a3fdc6b))
|
||||
* **utils:** 增加了无极分类的测试用例 ([97848a5](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/commit/97848a5e2299d33b46ded328ea03ac76e19c5cd0))
|
||||
|
||||
## [1.0.0-alpha.14](http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore/compare/v1.0.0-alpha.13...v1.0.0-alpha.14) (2023-10-23)
|
||||
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.0.0-alpha.14
|
||||
1.0.0-alpha.16
|
||||
@@ -15,20 +15,20 @@
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"php": ">=8.1",
|
||||
"ext-redis": "^5.3|^6.0",
|
||||
"ext-swoole": "*",
|
||||
"composer/composer": ">=2.0",
|
||||
"ergebnis/http-method": "^2.2",
|
||||
"hyperf/config": "^3.0.18",
|
||||
"hyperf/constants": "^3.0.18",
|
||||
"hyperf/context": "^3.0.18",
|
||||
"hyperf/di": "^3.0.18",
|
||||
"hyperf/framework": "^3.0.18",
|
||||
"hyperf/logger": "^3.0.18",
|
||||
"hyperf/redis": "^3.0.18",
|
||||
"hyperf/resource": "^3.0.18",
|
||||
"hyperf/translation": "^3.0.18",
|
||||
"hyperf/config": "3.1.*",
|
||||
"hyperf/constants": "3.1.*",
|
||||
"hyperf/context": "3.1.*",
|
||||
"hyperf/di": "3.1.*",
|
||||
"hyperf/framework": "3.1.*",
|
||||
"hyperf/logger": "3.1.*",
|
||||
"hyperf/redis": "3.1.*",
|
||||
"hyperf/resource": "3.1.*",
|
||||
"hyperf/translation": "3.1.*",
|
||||
"jetbrains/phpstorm-attributes": "^1.0",
|
||||
"lmc/http-constants": "^1.2",
|
||||
"myclabs/php-enum": "^1.8",
|
||||
@@ -41,33 +41,34 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"alibabacloud/dysmsapi-20170525": "^2.0",
|
||||
"cooper/hyperf-pest": "^1.1",
|
||||
"firebase/php-jwt": "^6.1",
|
||||
"friendsofhyperf/pest-plugin-hyperf": "3.1.*",
|
||||
"friendsofhyperf/rector": "^0.1.5",
|
||||
"friendsofphp/php-cs-fixer": "^3.13",
|
||||
"guzzlehttp/guzzle": "^7.5",
|
||||
"hyperf/crontab": "^3.0.18",
|
||||
"hyperf/database": "^3.0.18",
|
||||
"hyperf/db": "^3.0.18",
|
||||
"hyperf/guzzle": "^3.0.18",
|
||||
"hyperf/session": "^3.0.18",
|
||||
"hyperf/validation": "^3.0.18",
|
||||
"pestphp/pest": "^1.22",
|
||||
"hyperf/crontab": "3.1.*",
|
||||
"hyperf/database": "3.1.*",
|
||||
"hyperf/db": "3.1.*",
|
||||
"hyperf/guzzle": "3.1.*",
|
||||
"hyperf/session": "3.1.*",
|
||||
"hyperf/testing": "^3.1",
|
||||
"hyperf/validation": "3.1.*",
|
||||
"pestphp/pest": "^2.23",
|
||||
"phpstan/phpstan": "^1.9",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"roave/security-advisories": "dev-latest",
|
||||
"spatie/pest-plugin-test-time": "^1.1",
|
||||
"spatie/pest-plugin-test-time": "^2.0",
|
||||
"swoole/ide-helper": "*",
|
||||
"symfony/mailer": "^6.0",
|
||||
"symfony/serializer": "^6.0"
|
||||
},
|
||||
"suggest": {
|
||||
"firebase/php-jwt": "JWT 鉴权必需",
|
||||
"hyperf/session": "^3.0.18",
|
||||
"hyperf/session": "3.1.*",
|
||||
"symfony/mailer": "用于发送电子邮件",
|
||||
"symfony/serializer": "处理 XML 必需",
|
||||
"ext-dom": "处理 XML 必需",
|
||||
"ext-libxml": "处理 XML 必需",
|
||||
"hyperf/guzzle": "^3.0.18",
|
||||
"hyperf/guzzle": "3.1.*",
|
||||
"alibabacloud/dysmsapi-20170525": "阿里云短信服务必需"
|
||||
},
|
||||
"config": {
|
||||
@@ -107,15 +108,14 @@
|
||||
"post-root-package-install": [],
|
||||
"test": [
|
||||
"rm -rf runtime",
|
||||
"Composer\\Config::disableProcessTimeout",
|
||||
"co-pest --prepend tests/bootstrap.php -c phpunit.xml --colors=always $1"
|
||||
"pest --coroutine --prepend tests/bootstrap.php --colors=always"
|
||||
],
|
||||
"cs-fix": "vendor/bin/php-cs-fixer fix $1 --rules=@PSR12 --allow-risky=yes",
|
||||
"analyse": "vendor/bin/phpstan analyse $1",
|
||||
"ci": [
|
||||
"@analyse publish/ src/ tests/",
|
||||
"@cs-fix",
|
||||
"@test --ci",
|
||||
"@test",
|
||||
"echo CI Success"
|
||||
]
|
||||
},
|
||||
@@ -129,5 +129,5 @@
|
||||
"url": "https://mirrors.aliyun.com/composer/"
|
||||
}
|
||||
},
|
||||
"version": "1.0.0-alpha.14"
|
||||
"version": "1.0.0-alpha.16"
|
||||
}
|
||||
|
||||
3885
composer.lock
generated
3885
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,7 @@ parameters:
|
||||
- tests
|
||||
ignoreErrors:
|
||||
- '#Constant BASE_PATH not found#'
|
||||
- '#Unknown parameter \$[a-zA-Z0-9]+ in call to callable Closure\.#'
|
||||
- '#Property [a-zA-Z0-9\\_]+::\$[a-zA-Z0-9]+ is never written, only read\.#'
|
||||
- '#Method [a-zA-Z0-9\\_]+::[a-zA-Z0-9]+\(\) is unused\.#'
|
||||
- '#Method [a-zA-Z0-9\\_]+::[a-zA-Z0-9]+\(\) has parameter \$response with no value type specified in iterable type array\.#'
|
||||
|
||||
18
phpunit.xml
18
phpunit.xml
@@ -1,10 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="vendor/autoload.php"
|
||||
colors="true" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd">
|
||||
<phpunit
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
bootstrap="./tests/bootstrap.php"
|
||||
colors="true"
|
||||
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.4/phpunit.xsd"
|
||||
cacheDirectory=".phpunit.cache"
|
||||
>
|
||||
<coverage/>
|
||||
<testsuites>
|
||||
<testsuite name="Unit">
|
||||
<directory>./tests/Unit/</directory>
|
||||
<testsuite name="Tests">
|
||||
<directory>./tests</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<source>
|
||||
<include>
|
||||
<directory>./app</directory>
|
||||
</include>
|
||||
</source>
|
||||
</phpunit>
|
||||
|
||||
@@ -73,9 +73,9 @@ class CommonHandler extends ExceptionHandler
|
||||
$is_testing = config('app_status') === true;
|
||||
$this->request?->url();
|
||||
$is_debug = $this->request?->hasHeader('Postman-Token') || str_starts_with(
|
||||
$this->request?->header('User-Agent', ''),
|
||||
'apifox'
|
||||
);
|
||||
$this->request?->header('User-Agent', ''),
|
||||
'apifox'
|
||||
);
|
||||
$error_type = $throwable::class;
|
||||
$request_time = Carbon::now()->toDateTimeString();
|
||||
$request_data = Json::encode($this->request?->getParsedBody());
|
||||
@@ -156,7 +156,9 @@ class CommonHandler extends ExceptionHandler
|
||||
// 模型不存在
|
||||
if ($throwable instanceof ModelNotFoundException) {
|
||||
$code = empty($throwable->getCode()) ? CommonErrorCode::MODEL_NOT_FOUND : $throwable->getCode();
|
||||
$message = empty($throwable->getCode()) ? CommonErrorCode::getMessage($code, ['resource' => '资源']
|
||||
$message = empty($throwable->getCode()) ? CommonErrorCode::getMessage(
|
||||
$code,
|
||||
['resource' => '资源']
|
||||
) : $throwable->getMessage();
|
||||
$data = [$code_name => $code, $message_name => $message];
|
||||
$status_code = RFC7231::NOT_FOUND;
|
||||
|
||||
@@ -14,6 +14,8 @@ use Hyperf\Guzzle\ClientFactory;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Singularity\HDK\Core\Service\AbstractSingleton;
|
||||
|
||||
use function Hyperf\Support\make;
|
||||
|
||||
/**
|
||||
* Singularity\HDK\Core\Service\Http\RequestService@Core
|
||||
*
|
||||
@@ -41,7 +43,7 @@ final class RequestService extends AbstractSingleton
|
||||
{
|
||||
$this->setOptions($options);
|
||||
/** @var ClientFactory $client */
|
||||
$client = \Hyperf\Support\make(ClientFactory::class);
|
||||
$client = make(ClientFactory::class);
|
||||
$this->client = $client;
|
||||
}
|
||||
|
||||
@@ -59,7 +61,7 @@ final class RequestService extends AbstractSingleton
|
||||
/**
|
||||
* @param string $url
|
||||
* @param array<string, string|int> $params
|
||||
* @param array $data
|
||||
* @param array<string, mixed> $data
|
||||
* @param Options $options
|
||||
* @return ResponseInterface
|
||||
* @throws GuzzleException
|
||||
@@ -71,7 +73,8 @@ final class RequestService extends AbstractSingleton
|
||||
array $options = []
|
||||
): ResponseInterface {
|
||||
$request = new Request(
|
||||
method: Method\Rfc\Rfc7231::GET, uri: $url
|
||||
method: Method\Rfc\Rfc7231::GET,
|
||||
uri: $url
|
||||
);
|
||||
return $this->getClient($options)->send($request, ['query' => $params, 'json' => $data,]);
|
||||
}
|
||||
@@ -133,7 +136,8 @@ final class RequestService extends AbstractSingleton
|
||||
body: Utils::streamFor($data)
|
||||
);
|
||||
return $this->getClient($options)->send(
|
||||
$request, ['query' => $params,]
|
||||
$request,
|
||||
['query' => $params,]
|
||||
);
|
||||
}
|
||||
|
||||
@@ -159,7 +163,8 @@ final class RequestService extends AbstractSingleton
|
||||
body: Utils::streamFor($data)
|
||||
);
|
||||
return $this->getClient($options)->send(
|
||||
$request, ['query' => $params,]
|
||||
$request,
|
||||
['query' => $params,]
|
||||
);
|
||||
}
|
||||
|
||||
@@ -185,7 +190,8 @@ final class RequestService extends AbstractSingleton
|
||||
body: Utils::streamFor($data)
|
||||
);
|
||||
return $this->getClient($options)->send(
|
||||
$request, ['query' => $params,]
|
||||
$request,
|
||||
['query' => $params,]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,8 +15,13 @@ use Singularity\HDK\Core\Service\AbstractFactory;
|
||||
|
||||
final class RequestServiceFactory extends AbstractFactory
|
||||
{
|
||||
/**
|
||||
* @param array<string,mixed> $options
|
||||
*
|
||||
* @return RequestService
|
||||
*/
|
||||
public static function make(array $options = []): RequestService
|
||||
{
|
||||
return new RequestService($options);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,12 +15,13 @@ use Hyperf\Contract\Arrayable;
|
||||
use Hyperf\Contract\Jsonable;
|
||||
use Hyperf\Contract\LengthAwarePaginatorInterface;
|
||||
use Hyperf\Di\Annotation\Inject;
|
||||
use Hyperf\HttpMessage\Server\ResponsePlusProxy;
|
||||
use Hyperf\HttpMessage\Stream\SwooleStream;
|
||||
use Hyperf\HttpServer\CoreMiddleware;
|
||||
use Lmc\HttpConstants\Header;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Singularity\HDK\Core\Service\UtilsService;
|
||||
use Swow\Psr7\Message\ResponsePlusInterface;
|
||||
|
||||
use function Hyperf\Config\config;
|
||||
|
||||
@@ -32,7 +33,7 @@ use function Hyperf\Config\config;
|
||||
* Created on 2022/4/29
|
||||
*
|
||||
* @deprecated
|
||||
* @see CommonCoreMiddleware
|
||||
* @see CommonCoreMiddleware
|
||||
*/
|
||||
class ClassicCoreMiddleware extends CoreMiddleware
|
||||
{
|
||||
@@ -43,24 +44,41 @@ class ClassicCoreMiddleware extends CoreMiddleware
|
||||
* Transfer the non-standard response content to a standard response object.
|
||||
* @template TKey of array-key
|
||||
* @template TValue
|
||||
*
|
||||
* @param null|array<TKey, TValue>|Arrayable<TKey, TValue>|Jsonable|string $response
|
||||
*/
|
||||
protected function transferToResponse($response, ServerRequestInterface $request): ResponseInterface
|
||||
{
|
||||
protected function transferToResponse(
|
||||
$response,
|
||||
ServerRequestInterface $request
|
||||
): ResponsePlusInterface {
|
||||
$code_name = config('common.response.code_name');
|
||||
$message_name = config('common.response.message_name');
|
||||
$data_name = config('common.response.data_name');
|
||||
// 分页数据
|
||||
if ($response instanceof LengthAwarePaginatorInterface) {
|
||||
$paginator = $response;
|
||||
$fact_response = $this->response()->withHeader('Per-Page', (string)$paginator->perPage())->withHeader(
|
||||
'Total',
|
||||
(string)$paginator->total()
|
||||
)->withHeader('Current-Page', (string)$paginator->currentPage())->withHeader(
|
||||
'Total-Pages',
|
||||
(string)$paginator->hasPages()
|
||||
$fact_response = $this->response()
|
||||
->withHeader(
|
||||
'Per-Page',
|
||||
(string)$paginator->perPage()
|
||||
)
|
||||
->withHeader(
|
||||
'Total',
|
||||
(string)$paginator->total()
|
||||
)
|
||||
->withHeader(
|
||||
'Current-Page',
|
||||
(string)$paginator->currentPage()
|
||||
)
|
||||
->withHeader(
|
||||
'Total-Pages',
|
||||
(string)$paginator->hasPages()
|
||||
);
|
||||
$fact_response = $this->utilsService->extendLinkToHeader(
|
||||
$fact_response,
|
||||
$paginator->nextPageUrl(),
|
||||
'next'
|
||||
);
|
||||
$fact_response = $this->utilsService->extendLinkToHeader($fact_response, $paginator->nextPageUrl(), 'next');
|
||||
$fact_response = $this->utilsService->extendLinkToHeader(
|
||||
$fact_response,
|
||||
$paginator->url($paginator->lastPage()),
|
||||
@@ -72,23 +90,27 @@ class ClassicCoreMiddleware extends CoreMiddleware
|
||||
$paginator->previousPageUrl(),
|
||||
'prev'
|
||||
);
|
||||
return $fact_response->withAddedHeader(Header::CONTENT_TYPE, 'application/json')->withBody(
|
||||
new SwooleStream(
|
||||
Json::encode(
|
||||
[
|
||||
$code_name => 200,
|
||||
$message_name => 'ok',
|
||||
$data_name => $response->items(),
|
||||
'meta' => [
|
||||
'currentPage' => $paginator->currentPage(),
|
||||
'lastPage' => $paginator->lastPage(),
|
||||
'perPage' => $paginator->perPage(),
|
||||
'total' => $paginator->total(),
|
||||
],
|
||||
]
|
||||
$resp = $fact_response
|
||||
->withAddedHeader(Header::CONTENT_TYPE, 'application/json')
|
||||
->withBody(
|
||||
new SwooleStream(
|
||||
Json::encode(
|
||||
[
|
||||
$code_name => 200,
|
||||
$message_name => 'ok',
|
||||
$data_name => $response->items(),
|
||||
'meta' => [
|
||||
'currentPage' => $paginator->currentPage(),
|
||||
'lastPage' => $paginator->lastPage(),
|
||||
'perPage' => $paginator->perPage(),
|
||||
'total' => $paginator->total(),
|
||||
],
|
||||
]
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
);
|
||||
|
||||
return new ResponsePlusProxy($resp);
|
||||
}
|
||||
// 普通数组
|
||||
if (is_array($response) || $response instanceof Arrayable) {
|
||||
|
||||
@@ -15,6 +15,7 @@ use Hyperf\Contract\Arrayable;
|
||||
use Hyperf\Contract\Jsonable;
|
||||
use Hyperf\Contract\LengthAwarePaginatorInterface;
|
||||
use Hyperf\Di\Annotation\Inject;
|
||||
use Hyperf\HttpMessage\Server\ResponsePlusProxy;
|
||||
use Hyperf\HttpMessage\Stream\SwooleStream;
|
||||
use Hyperf\HttpServer\CoreMiddleware;
|
||||
use Lmc\HttpConstants\Header;
|
||||
@@ -22,6 +23,7 @@ use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Singularity\HDK\Core\Service\ApiStyleService;
|
||||
use Singularity\HDK\Core\Service\UtilsService;
|
||||
use Swow\Psr7\Message\ResponsePlusInterface;
|
||||
|
||||
use function Hyperf\Config\config;
|
||||
|
||||
@@ -43,24 +45,31 @@ class CommonCoreMiddleware extends CoreMiddleware
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected function transferToResponse($response, ServerRequestInterface $request): ResponseInterface
|
||||
{
|
||||
protected function transferToResponse(
|
||||
$response,
|
||||
ServerRequestInterface $request
|
||||
): ResponsePlusInterface {
|
||||
$style = $this->apiStyleService->get();
|
||||
|
||||
if ($style === ApiStyleService::RESTFUL) {
|
||||
return $this->transferToRestfulResponse($response, $request);
|
||||
$response = $this->transferToRestfulResponse($response, $request);
|
||||
} else {
|
||||
return $this->transferToClassicResponse($response, $request);
|
||||
$response = $this->transferToClassicResponse($response, $request);
|
||||
}
|
||||
|
||||
return new ResponsePlusProxy($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array|string|Arrayable|Jsonable|null $response
|
||||
* @param ServerRequestInterface $request
|
||||
* @param ServerRequestInterface $request
|
||||
*
|
||||
* @return ResponseInterface
|
||||
*/
|
||||
protected function transferToRestfulResponse(Arrayable|Jsonable|array|string|null $response, ServerRequestInterface $request): ResponseInterface
|
||||
{
|
||||
protected function transferToRestfulResponse(
|
||||
Arrayable|Jsonable|array|string|null $response,
|
||||
ServerRequestInterface $request
|
||||
): ResponseInterface {
|
||||
// 分页数据
|
||||
if ($response instanceof LengthAwarePaginatorInterface) {
|
||||
$fact_response = $this->response()
|
||||
@@ -88,7 +97,8 @@ class CommonCoreMiddleware extends CoreMiddleware
|
||||
|
||||
/**
|
||||
* @param array|string|Arrayable|Jsonable|null $response
|
||||
* @param ServerRequestInterface $request
|
||||
* @param ServerRequestInterface $request
|
||||
*
|
||||
* @return ResponseInterface
|
||||
*/
|
||||
protected function transferToClassicResponse(
|
||||
|
||||
@@ -13,10 +13,11 @@ use Hyperf\Contract\Arrayable;
|
||||
use Hyperf\Contract\Jsonable;
|
||||
use Hyperf\Contract\LengthAwarePaginatorInterface;
|
||||
use Hyperf\Di\Annotation\Inject;
|
||||
use Hyperf\HttpMessage\Server\ResponsePlusProxy;
|
||||
use Hyperf\HttpServer\CoreMiddleware;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Singularity\HDK\Core\Service\UtilsService;
|
||||
use Swow\Psr7\Message\ResponsePlusInterface;
|
||||
|
||||
/**
|
||||
* Singularity\HDK\Core\Middleware\RestfulCoreMiddleware@HDK-Core
|
||||
@@ -26,7 +27,7 @@ use Singularity\HDK\Core\Service\UtilsService;
|
||||
* Created on 2023/1/14
|
||||
*
|
||||
* @deprecated
|
||||
* @see CommonCoreMiddleware
|
||||
* @see CommonCoreMiddleware
|
||||
*/
|
||||
class RestfulCoreMiddleware extends CoreMiddleware
|
||||
{
|
||||
@@ -37,11 +38,14 @@ class RestfulCoreMiddleware extends CoreMiddleware
|
||||
* @template TKey of array-key
|
||||
* @template TValue
|
||||
* @param null|array<TKey, TValue>|Arrayable<TKey, TValue>|Jsonable|string $response
|
||||
* @param ServerRequestInterface $request
|
||||
* @return ResponseInterface
|
||||
* @param ServerRequestInterface $request
|
||||
*
|
||||
* @return ResponsePlusInterface
|
||||
*/
|
||||
protected function transferToResponse($response, ServerRequestInterface $request): ResponseInterface
|
||||
{
|
||||
protected function transferToResponse(
|
||||
$response,
|
||||
ServerRequestInterface $request
|
||||
): ResponsePlusInterface {
|
||||
// 分页数据
|
||||
if ($response instanceof LengthAwarePaginatorInterface) {
|
||||
$fact_response = $this->response()
|
||||
@@ -56,11 +60,12 @@ class RestfulCoreMiddleware extends CoreMiddleware
|
||||
'last'
|
||||
);
|
||||
$fact_response = $this->utilsService->extendLinkToHeader($fact_response, $response->url(1), 'first');
|
||||
return $this->utilsService->extendLinkToHeader(
|
||||
$resp = $this->utilsService->extendLinkToHeader(
|
||||
$fact_response,
|
||||
$response->previousPageUrl(),
|
||||
'prev'
|
||||
);
|
||||
return new ResponsePlusProxy($resp);
|
||||
}
|
||||
|
||||
return parent::transferToResponse($response, $request);
|
||||
|
||||
@@ -86,7 +86,7 @@ class SessionMiddleware implements MiddlewareInterface
|
||||
/**
|
||||
* Store the current URL for the request if necessary.
|
||||
*/
|
||||
private function storeCurrentUrl(RequestInterface $request, SessionInterface $session)
|
||||
private function storeCurrentUrl(RequestInterface $request, SessionInterface $session): void
|
||||
{
|
||||
if ($request->getMethod() === 'GET') {
|
||||
$session->setPreviousUrl($this->fullUrl($request));
|
||||
@@ -155,7 +155,7 @@ class SessionMiddleware implements MiddlewareInterface
|
||||
return rtrim(preg_replace('/\?.*/', '', (string)$request->getUri()));
|
||||
}
|
||||
|
||||
private function auth(SessionInterface $session)
|
||||
private function auth(SessionInterface $session): bool
|
||||
{
|
||||
return $session->has('userInfo');
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ namespace Singularity\HDK\Core\Service;
|
||||
|
||||
use Dont\DontCall;
|
||||
use Dont\DontInstantiate;
|
||||
use Singularity\HDK\Core\Http\RequestService;
|
||||
|
||||
/**
|
||||
* Singularity\HDK\Core\Service\AbstractFactory@Core
|
||||
@@ -26,5 +27,5 @@ abstract class AbstractFactory
|
||||
use DontInstantiate;
|
||||
use DontCall;
|
||||
|
||||
abstract static function make();
|
||||
}
|
||||
abstract public static function make(): RequestService;
|
||||
}
|
||||
|
||||
@@ -23,4 +23,4 @@ abstract class AbstractSingleton
|
||||
{
|
||||
use DontCallStatic;
|
||||
use DontClone;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ class HttpRequestService
|
||||
/**
|
||||
* @param string $url
|
||||
* @param array<string, string|int> $params
|
||||
* @param array $data
|
||||
* @param array<string, mixed> $data
|
||||
* @return ResponseInterface
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
namespace Singularity\HDK\Core\Traits;
|
||||
|
||||
use Closure;
|
||||
use Hyperf\Contract\LengthAwarePaginatorInterface;
|
||||
use Hyperf\Database\Model\Builder;
|
||||
use Hyperf\Database\Model\Relations\Relation;
|
||||
use Hyperf\Di\Annotation\Inject;
|
||||
use Hyperf\HttpServer\Contract\RequestInterface;
|
||||
use Hyperf\Paginator\AbstractPaginator;
|
||||
use Hyperf\Stringable\Str;
|
||||
use Singularity\HDK\Core\Service\ExtendService;
|
||||
|
||||
@@ -25,7 +25,7 @@ trait RestfulList
|
||||
#[Inject]
|
||||
protected RequestInterface $request;
|
||||
|
||||
protected function restSelect(Closure $callback, ?Closure $filter = null)
|
||||
protected function restSelect(Closure $callback, ?Closure $filter = null): mixed
|
||||
{
|
||||
$parsed_options = [];
|
||||
$result = $this->parseParameters(
|
||||
@@ -52,11 +52,18 @@ trait RestfulList
|
||||
return $callback(query: $query, options: $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $options
|
||||
* @param Builder|Relation $builder
|
||||
* @param Closure|null $filter
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
protected function responseFormatter(
|
||||
array $options,
|
||||
Builder|Relation $builder,
|
||||
?Closure $filter = null
|
||||
) {
|
||||
): mixed {
|
||||
$perPage = $options['size'] ?? null;
|
||||
$order = $options['order'] ?? 'created_at';
|
||||
$sort = $options['sort'] ?? 'desc';
|
||||
@@ -70,7 +77,7 @@ trait RestfulList
|
||||
return $result;
|
||||
}
|
||||
|
||||
if ($result instanceof LengthAwarePaginatorInterface) {
|
||||
if ($result instanceof AbstractPaginator) {
|
||||
$collection = $result->getCollection();
|
||||
$collection = $filter($collection);
|
||||
|
||||
@@ -78,4 +85,4 @@ trait RestfulList
|
||||
}
|
||||
return $filter($result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ it('assertions that send HTML is available', function () use ($email) {
|
||||
HTML
|
||||
);
|
||||
expect($result)->toBeTrue();
|
||||
});
|
||||
})->skip();
|
||||
|
||||
it('assertions that send Text is available', function () use ($email) {
|
||||
$result = $email->sendText(
|
||||
@@ -37,7 +37,7 @@ it('assertions that send Text is available', function () use ($email) {
|
||||
Text
|
||||
);
|
||||
expect($result)->toBeTrue();
|
||||
});
|
||||
})->skip();
|
||||
|
||||
it('assertions Error Receiver can be catch', function () use ($email) {
|
||||
try {
|
||||
@@ -62,4 +62,4 @@ Text
|
||||
} catch (TransportException $t) {
|
||||
expect($t->getCode())->toBe(554);
|
||||
}
|
||||
});
|
||||
})->skip('会报错必须运行在协程环境下');
|
||||
|
||||
@@ -13,6 +13,8 @@ use Hyperf\Context\Context;
|
||||
use Singularity\HDK\Core\Service\ExtendService;
|
||||
use Singularity\HDK\Core\Service\UtilsService;
|
||||
|
||||
use function Hyperf\Support\make;
|
||||
|
||||
/** @var ExtendService $service */
|
||||
$service = make(ExtendService::class, ['utils' => new UtilsService()]);
|
||||
it('asserts no parameters can be parsed.', function (ExtendService $service, $params) {
|
||||
|
||||
@@ -9,8 +9,10 @@
|
||||
*/
|
||||
|
||||
namespace Singularity\HDK\Test\Core\Unit;
|
||||
|
||||
use Singularity\HDK\Core\Http\RequestService;
|
||||
use Singularity\HDK\Core\Http\RequestServiceFactory;
|
||||
use Teapot\StatusCode\RFC\RFC7231;
|
||||
|
||||
class RequestServiceTest
|
||||
{
|
||||
@@ -30,12 +32,8 @@ class RequestServiceTest
|
||||
test('Http 请求服务可以正常使用', function () {
|
||||
/** @var RequestServiceTest $class */
|
||||
$class = \Hyperf\Support\make(RequestServiceTest::class);
|
||||
$response = $class->getInstance()->requestGet('http://baidu.com/');
|
||||
$content = $response->getBody()->getContents();
|
||||
expect($content)->toBe(<<<HTML
|
||||
<html>
|
||||
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
|
||||
</html>
|
||||
|
||||
HTML);
|
||||
$response = $class->getInstance()->setOptions([
|
||||
'allow_redirects' => false,
|
||||
])->requestGet('https://www.baidu.com');
|
||||
expect($response->getStatusCode())->toBe(RFC7231::OK);
|
||||
});
|
||||
|
||||
@@ -7,14 +7,172 @@
|
||||
* Created on 2023/1/12
|
||||
*/
|
||||
|
||||
use Hyperf\Codec\Json;
|
||||
use Singularity\HDK\Core\Service\UtilsService;
|
||||
|
||||
$utils = new UtilsService();
|
||||
use function Hyperf\Support\make;
|
||||
|
||||
$utils = new UtilsService();
|
||||
dataset('categories', [
|
||||
[
|
||||
'source' => <<<JSON
|
||||
[
|
||||
{
|
||||
"id": 200002538,
|
||||
"name": "空心菜类",
|
||||
"level": 3,
|
||||
"namePath": "蔬菜/豆制品,叶菜类,空心菜类"
|
||||
},
|
||||
{
|
||||
"id": 200002537,
|
||||
"name": "香菜类",
|
||||
"level": 3,
|
||||
"namePath": "蔬菜/豆制品,葱姜蒜椒/调味菜,香菜类"
|
||||
},
|
||||
{
|
||||
"id": 200002536,
|
||||
"name": "紫苏/苏子叶",
|
||||
"level": 3,
|
||||
"namePath": "蔬菜/豆制品,叶菜类,紫苏/苏子叶"
|
||||
},
|
||||
{
|
||||
"id": 200002543,
|
||||
"name": "乌塌菜/塌菜/乌菜",
|
||||
"level": 3,
|
||||
"namePath": "蔬菜/豆制品,叶菜类,乌塌菜/塌菜/乌菜"
|
||||
},
|
||||
{
|
||||
"id": 200002542,
|
||||
"name": "菜心/菜苔类",
|
||||
"level": 3,
|
||||
"namePath": "蔬菜/豆制品,叶菜类,菜心/菜苔类"
|
||||
},
|
||||
{
|
||||
"id": 200002540,
|
||||
"name": "马兰头/马兰/红梗菜",
|
||||
"level": 3,
|
||||
"namePath": "蔬菜/豆制品,叶菜类,马兰头/马兰/红梗菜"
|
||||
},
|
||||
{
|
||||
"id": 200002531,
|
||||
"name": "苋菜类",
|
||||
"level": 3,
|
||||
"namePath": "蔬菜/豆制品,叶菜类,苋菜类"
|
||||
},
|
||||
{
|
||||
"id": 200002528,
|
||||
"name": "其他叶菜类",
|
||||
"level": 3,
|
||||
"namePath": "蔬菜/豆制品,叶菜类,其他叶菜类"
|
||||
}
|
||||
]
|
||||
JSON,
|
||||
'expected' => <<<JSON
|
||||
[
|
||||
{
|
||||
"id": "e485b0bb87",
|
||||
"id_path": ",e485b0bb87,",
|
||||
"level": 1,
|
||||
"name": "蔬菜/豆制品",
|
||||
"name_path": "蔬菜/豆制品",
|
||||
"parent_id": 0,
|
||||
"children": [
|
||||
{
|
||||
"id": "bf1753faa2",
|
||||
"id_path": ",e485b0bb87,bf1753faa2,",
|
||||
"level": 2,
|
||||
"name": "叶菜类",
|
||||
"name_path": "蔬菜/豆制品,叶菜类",
|
||||
"parent_id": "e485b0bb87",
|
||||
"children": [
|
||||
{
|
||||
"id": "b8c8b14630",
|
||||
"id_path": ",e485b0bb87,bf1753faa2,b8c8b14630,",
|
||||
"level": 3,
|
||||
"name": "空心菜类",
|
||||
"name_path": "蔬菜/豆制品,叶菜类,空心菜类",
|
||||
"parent_id": "bf1753faa2"
|
||||
},
|
||||
{
|
||||
"id": "78c941ae91",
|
||||
"id_path": ",e485b0bb87,bf1753faa2,78c941ae91,",
|
||||
"level": 3,
|
||||
"name": "紫苏/苏子叶",
|
||||
"name_path": "蔬菜/豆制品,叶菜类,紫苏/苏子叶",
|
||||
"parent_id": "bf1753faa2"
|
||||
},
|
||||
{
|
||||
"id": "eccbf542f9",
|
||||
"id_path": ",e485b0bb87,bf1753faa2,eccbf542f9,",
|
||||
"level": 3,
|
||||
"name": "乌塌菜/塌菜/乌菜",
|
||||
"name_path": "蔬菜/豆制品,叶菜类,乌塌菜/塌菜/乌菜",
|
||||
"parent_id": "bf1753faa2"
|
||||
},
|
||||
{
|
||||
"id": "3621a8c3dc",
|
||||
"id_path": ",e485b0bb87,bf1753faa2,3621a8c3dc,",
|
||||
"level": 3,
|
||||
"name": "菜心/菜苔类",
|
||||
"name_path": "蔬菜/豆制品,叶菜类,菜心/菜苔类",
|
||||
"parent_id": "bf1753faa2"
|
||||
},
|
||||
{
|
||||
"id": "aad334b5a0",
|
||||
"id_path": ",e485b0bb87,bf1753faa2,aad334b5a0,",
|
||||
"level": 3,
|
||||
"name": "马兰头/马兰/红梗菜",
|
||||
"name_path": "蔬菜/豆制品,叶菜类,马兰头/马兰/红梗菜",
|
||||
"parent_id": "bf1753faa2"
|
||||
},
|
||||
{
|
||||
"id": "70d40b44f2",
|
||||
"id_path": ",e485b0bb87,bf1753faa2,70d40b44f2,",
|
||||
"level": 3,
|
||||
"name": "苋菜类",
|
||||
"name_path": "蔬菜/豆制品,叶菜类,苋菜类",
|
||||
"parent_id": "bf1753faa2"
|
||||
},
|
||||
{
|
||||
"id": "45623d0c88",
|
||||
"id_path": ",e485b0bb87,bf1753faa2,45623d0c88,",
|
||||
"level": 3,
|
||||
"name": "其他叶菜类",
|
||||
"name_path": "蔬菜/豆制品,叶菜类,其他叶菜类",
|
||||
"parent_id": "bf1753faa2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "188ae68906",
|
||||
"id_path": ",e485b0bb87,188ae68906,",
|
||||
"level": 2,
|
||||
"name": "葱姜蒜椒/调味菜",
|
||||
"name_path": "蔬菜/豆制品,葱姜蒜椒/调味菜",
|
||||
"parent_id": "e485b0bb87",
|
||||
"children": [
|
||||
{
|
||||
"id": "4c64873413",
|
||||
"id_path": ",e485b0bb87,188ae68906,4c64873413,",
|
||||
"level": 3,
|
||||
"name": "香菜类",
|
||||
"name_path": "蔬菜/豆制品,葱姜蒜椒/调味菜,香菜类",
|
||||
"parent_id": "188ae68906"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
JSON
|
||||
],
|
||||
]);
|
||||
$length_data = [];
|
||||
for ($i = 0; $i < 5; $i++) {
|
||||
try {
|
||||
$length_data[] = random_int(1, 9);
|
||||
$length_data[(string)$i] = [
|
||||
'length' => random_int(1, 9)
|
||||
];
|
||||
} catch (Exception $e) {
|
||||
continue;
|
||||
}
|
||||
@@ -58,7 +216,7 @@ test('断言可以根据参数构建 URL', function (string $url, array $params,
|
||||
['c' => 'd'],
|
||||
true,
|
||||
'http://username:password@127.0.0.1/git/resp?id=1#/page?a=b&c=d',
|
||||
]
|
||||
],
|
||||
])->group('pure', 'utils');
|
||||
|
||||
test('断言可以判断是否是数组中的元素', function (
|
||||
@@ -79,3 +237,42 @@ test('断言可以判断是否是数组中的元素', function (
|
||||
['1', ['1', 2, 3], true, false],
|
||||
[[1, 2, 3], ['1', 2, 3], false, true],
|
||||
])->group('pure', 'utils');
|
||||
|
||||
test('无极分类', function (string $source, string $expected) {
|
||||
$tree = [];
|
||||
|
||||
foreach (Json::decode($source) as $item) {
|
||||
$path_array = explode(',', $item['namePath']);
|
||||
$parent_id = 0;
|
||||
|
||||
$name_path = [];
|
||||
$id_path = ',';
|
||||
|
||||
foreach ($path_array as $i => $name) {
|
||||
$name_path[] = $name;
|
||||
$level = $i + 1;
|
||||
$id = substr(md5($level . $name), 0, 10);
|
||||
$id_path .= $id . ',';
|
||||
$new_item = [
|
||||
'id' => $id,
|
||||
'id_path' => $id_path,
|
||||
'level' => $level,
|
||||
'name' => $name,
|
||||
'name_path' => join(',', $name_path + [$name]),
|
||||
'parent_id' => $parent_id,
|
||||
];
|
||||
|
||||
$tree[$id] = $new_item;
|
||||
$parent_id = $id;
|
||||
}
|
||||
}
|
||||
|
||||
/** @var UtilsService $utils */
|
||||
$utils = make(UtilsService::class);
|
||||
usort($tree, fn ($prevent, $current) => $current['level'] <=> $prevent['level']);
|
||||
|
||||
$tree = array_column($tree, null, 'id');
|
||||
$utils->unlimitedSubCategoriesQuicklyWithLevel(list: $tree);
|
||||
|
||||
expect($tree)->toBe(Json::decode($expected));
|
||||
})->with('categories');
|
||||
|
||||
@@ -1,14 +1,6 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* This file is part of Hyperf.
|
||||
*
|
||||
* @link https://www.hyperf.io
|
||||
* @document https://hyperf.wiki
|
||||
* @contact group@hyperf.io
|
||||
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
use Hyperf\Context\ApplicationContext;
|
||||
use Hyperf\Di\Container;
|
||||
@@ -34,4 +26,4 @@ $container = new Container(new DefinitionSource([]));
|
||||
if (!$container instanceof ContainerInterface) {
|
||||
throw new RuntimeException('The dependency injection container is invalid.');
|
||||
}
|
||||
$container = ApplicationContext::setContainer($container);
|
||||
$container = ApplicationContext::setContainer($container);
|
||||
|
||||
Reference in New Issue
Block a user