xervice/processor

2.0.0 2019-05-01 20:19 UTC

This package is auto-updated.

Last update: 2024-09-29 05:28:22 UTC


README

Scrutinizer Code Quality Code Coverage

安装

composer require xervice/processor

配置

您必须创建一个新的进程配置插件,实现 \Xervice\Processor\Business\Dependency\ProcessConfigurationPluginInterface。您必须将该类注册到 ProcessorDependencyProvider 中以添加您的进程。

进程是一个包含以下步骤的数据生命周期:

  1. 读取输入
  2. 验证数据
  3. 填充数据
  4. 翻译数据
  5. 处理数据
  6. 写入数据

所有针对给定步骤的登录都可以在进程配置插件中进行配置。

读取输入

您可以在进程配置中定义一个 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);