leadvertex/plugin-component-process

此包已被废弃,不再维护。作者建议使用 leadvertex/plugin-component-batch 包。

LeadVertex 插件流程处理组件

0.4.6 2020-12-08 17:48 UTC

README

\Leadvertex\Plugin\Components\Process - 组件,设计用于基于基础数据库模型 来自数据库插件组件 存储并提供关于流程当前状态的信息,并接受流程 ID 作为输入。

安装

composer require leadvertex/plugin-component-process

用法

例如,您可以创建新的流程如下

<?php
require 'vendor/autoload.php';

use Leadvertex\Plugin\Components\Process\Process;

$process = new Process($id);
$process->save();

$process->initialize(5);
$process->save();
...

$process->handle();
$process->handle();
$process->handle();
$process->save();
...

$process->skip();
$process->save;
...

$process->addError(new Error('Error message', $entityId));
$process->save();
...

$result = $process->finish(true);
$process->save();

注意,您需要使用 save() 方法将实际信息保存到数据库。

初始化方法

方法 initialize() 的目的是指示正在处理的实体数量。
它接受要处理的实体数量。对于无法确定其确切值的场景,此数量可以为 null。
注意,您必须初始化流程,然后才能使用其 handle()skip()finish() 方法。
您可以使用 isInitialized() 方法检查流程是否已初始化。

处理方法

方法 handle() 的目的是增加成功处理的实体数量。
您可以使用 getHandledCount() 方法获取当前已处理的实体数量。

跳过方法

方法 skip() 的目的是跳过当前实体的处理。您可以在实体在处理期间变得不可访问或被删除的情况下使用它。
您可以使用 getSkippedCount() 方法获取当前跳过的实体数量。

添加错误方法

方法 addError() 的目的是在处理当前实体失败时使用。
它接受一个 \Leadvertex\Plugin\Components\Process\Components\Error 的实例。您可以像这样使用它

$process->addError(new Error('Entity handle is failed', $entityId));
$process->save();

$errors = $process->getLastErrors();

您可以使用 getLastErrors() 方法获取最后 20 个错误的列表。

终止方法

方法 terminate() 的目的是由于致命错误而停止流程的执行。
它接受一个 \Leadvertex\Plugin\Components\Process\Components\Error 的实例,以类似于 addError() 方式添加一个错误,将所有剩余实体的处理标记为失败,将流程执行的结果设置为 false,并将模型的 updatedAt 属性设置为当前日期和时间。
您可以使用 getResult() 方法获取流程执行的结果。
您可以使用此方法如下

$process->terminate(new Error('Fatal error', $entityId));
$process->save();

$errors = $process->getLastErrors();

完成方法

方法 finish() 的目的是在您的流程完成所有工作后使用。
它接受一个结果,可以是以下 3 种类型之一

  1. bool - 当您需要返回流程执行最终状态时使用。
  2. int - 当您需要返回已处理的实体数量时使用。
  3. string - 在需要返回URI时使用。

它还将进程执行的结果设置为接受值,并将模型中updatedAt属性设置为当前日期和时间。

JsonSerializable

进程实现了内置的jsonSerializable接口,这意味着您可以通过简单地使用json_encode对进程实例进行处理,以获得序列化的JSON格式的进程信息。例如,您可以这样使用:

$response = json_encode($process);