leadvertex / plugin-component-process
Requires
- php: >=7.4.0
- ext-json: *
- leadvertex/plugin-component-db: ^0.3.5
Requires (Dev)
- phpunit/phpunit: ^8.2
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 种类型之一
bool
- 当您需要返回流程执行最终状态时使用。int
- 当您需要返回已处理的实体数量时使用。string
- 在需要返回URI时使用。
它还将进程执行的结果设置为接受值,并将模型中updatedAt
属性设置为当前日期和时间。
JsonSerializable
进程实现了内置的jsonSerializable
接口,这意味着您可以通过简单地使用json_encode对进程实例进行处理,以获得序列化的JSON格式的进程信息。例如,您可以这样使用:
$response = json_encode($process);