xervice / processor
Requires
- php: >=7.1.0
- xervice/array-handler: ^2.1.0
- xervice/core: ^4.0.0
- xervice/data-provider: ^2.0.0
- xervice/validator: ^2.1.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-29 05:28:22 UTC
README
安装
composer require xervice/processor
配置
您必须创建一个新的进程配置插件,实现 \Xervice\Processor\Business\Dependency\ProcessConfigurationPluginInterface。您必须将该类注册到 ProcessorDependencyProvider 中以添加您的进程。
进程是一个包含以下步骤的数据生命周期:
- 读取输入
- 验证数据
- 填充数据
- 翻译数据
- 处理数据
- 写入数据
所有针对给定步骤的登录都可以在进程配置插件中进行配置。
读取输入
您可以在进程配置中定义一个 InputHandler 来读取数据。
/** * @return \Xervice\Processor\Business\Model\InputHandler\InputHandlerInterface */ public function getInputHandler(): InputHandlerInterface { return new RawJsonFileRowInputHandler(); }
验证数据
对于验证,您可以在进程配置中添加一个或多个 ValidatorPlugins 来验证您的数据。配置语法基于 xervice/validator 模块。
/** * @return \Xervice\Validator\Business\Dependency\ValidatorConfigurationProviderPluginInterface[] */ public function getValidatorConfigurationPlugins(): array { return [ new TestValidator() ]; }
class TestValidator implements ValidatorConfigurationProviderPluginInterface { /** * @return array */ public function getValidatorConfiguration(): array { return [ [ 'test' => [ 'required' => true, 'type' => IsType::TYPE_ARRAY ] ] ]; } }
填充
在您的数据验证后,您可以通过向进程配置中添加 HydratePlugins 来填充信息。配置语法基于 xervice/array-handler 模块。
仅配置中提供字段名将删除此条目。
/** * @return \Xervice\Processor\Business\Dependency\ProcessHydratorPluginInterface[] */ public function getHydratorPlugins(): array { return [ new TestHydrator() ]; }
class TestHydrator implements ProcessHydratorPluginInterface { /** * @return array */ public function getHydratorConfiguration(): array { return [ [ 'newValues' => function (array $payload) { return [ [ $payload['test'][0] ], [ $payload['test'][1] ] ]; }, 'test' ] ]; } }
翻译
在填充信息后,您可以将它们翻译成所需的结构。为此,您可以在进程配置中添加翻译插件。语法也是基于 xervice/array-handler 模块。您可以在其中定义翻译函数。您可以将新的翻译函数添加到 ProcessorDependencyProvider 中。
/** * @return \Xervice\Processor\Business\Dependency\ProcessTranslationPluginInterface[] */ public function getTranslatorPlugins(): array { return [ new TestTranslator() ]; }
class TestTranslator implements ProcessTranslationPluginInterface { /** * @return array */ public function getTranslationConfiguration(): array { return [ [ 'TestTranslator', 'TestTranslator' => [ 'field' => 'transOne', 'source' => 'newValues' ], 'transTwo' => function (array $payload) { return $payload['transOne'] ?? null; } ] ]; } }
use Xervice\Processor\Business\Model\Translator\TranslatorInterface; class TestTranslatorFunction implements TranslatorInterface { /** * @return string */ public function getName(): string { return 'TestTranslator'; } /** * @param array $payload * @param array $options * * @return array */ public function translate(array $payload, array $options = null): array { if (!isset($payload['isTranslated'])) { $payload['isTranslated'] = 0; } $payload['isTranslated']++; if (is_array($options)) { $payload[$options['field']] = $payload[$options['source']]; } return $payload; } }
class ProcessorDependencyProvider extends \Xervice\Processor\ProcessorDependencyProvider { /** * @return \Xervice\Processor\Business\Dependency\ProcessConfigurationPluginInterface[] */ protected function getProcessConfigurationPlugins(): array { return [ new ProcessConfiguration() ]; } /** * @return \Xervice\Processor\Business\Model\Translator\TranslatorInterface[] */ protected function getTranslatorFunctions(): array { return [ new TestTranslatorFunction() ]; } }
处理
数据处理是进入您模块业务逻辑的跳转。为此,您的进程配置中有一个钩子方法。返回值是您想要写入的数据有效负载。
/** * @param array $data * * @return array */ public function process(array $data): array { $data['isProcessed'] = true; // $this->getFacade()->processYourOwnData($data); return $data; }
写入数据
最后,数据将被提供给您的 OutputHandler 以持久化。您可以在进程配置中定义 OutputHandler。
/** * @return \Xervice\Processor\Business\Model\OutputHandler\OutputHandlerInterface */ public function getOutputHandler(): OutputHandlerInterface { return new RawJsonFileOutputHandler(); }
使用
您可以通过控制台命令运行进程
vendor/bin/xervice process:run -p YOUR_PROCESS_NAME
# With input and/or output info
vendor/bin/xervice process:run -p YOUR_PROCESS_NAME -i input
vendor/bin/xervice process:run -p YOUR_PROCESS_NAME -o output
vendor/bin/xervice process:run -p YOUR_PROCESS_NAME -i input -o output
您还可以使用 ProcessorFacade 触发进程
$processConfig = (new ProcessRunDataProvider()) ->setName('YOUR_PROCESS_PROCESS') ->setInput('input') ->setOutput('output'); $processorFacade->runProcess($processConfig);