soap/laravel-workflow-loader

这是我创建的包 laravel-workflow-loader

v0.1.2 2024-09-26 18:33 UTC

This package is auto-updated.

Last update: 2024-09-26 18:34:50 UTC


README

Latest Version on Packagist GitHub Tests Action Status PHPStan GitHub Code Style Action Status Total Downloads

此包通过添加将工作流配置存储在数据库中的选项扩展了zerodahero/laravel-workflow。Laravel工作流仅支持从Laravel配置中加载配置。此包允许用户更改工作流配置,而无需开发者的帮助。

支持我们

您可以提出任何改进建议,赞助此项目或发起拉取请求。我很乐意考虑任何建议。我不是一个好程序员,所以我的设计可能不是最好的。我的背景不是计算机编程。我是一名电气工程师。

安装

您可以通过composer安装此包

composer require soap/laravel-workflow-loader

您可以使用以下命令发布并运行迁移

php artisan vendor:publish --tag="workflow-loader-migrations"
php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="workflow-loader-config"

这是已发布配置文件的内容

return [
    'loaders' => [
        'database' => [
            'tableNames' => [
                'workflows' => 'workflows',
                'workflow_states' => 'workflow_states',
                'workflow_transitions' => 'workflow_transitions',
                'workflow_state_transitions' => 'workflow_state_transitions',
            ],
            'class' => \Soap\WorkflowLoader\DatabaseLoader::class,
        ],
    ],
];

要使用此包从数据库加载工作流配置,您需要注册包提供的工作流服务提供者。Zerodahero的工作流注册表将用于从数据库检索配置。

php artisan venodr:publish --tag="workflow-loader-provider"

这会将以下WorkflowServiceProvider.php复制到应用程序提供者文件夹,确保它包含在应用程序引导中。以下是文件的内容。

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class WorkflowServiceProvider extends ServiceProvider
{
    public function register() {}

    public function boot()
    {
        $registry = app()->make('workflow');
        $workflowLoaderRegistry = app()->make('workflowLoaderRegistry');   
        foreach ($workflowLoaderRegistry->all() as $workflow => $config) {
            $registry->addFromArray($workflow, $config);
        }
    }
}

此包不提供用户界面以供用户管理工作流配置。按设计,它应在单独的包中。我有一个创建filament插件来处理这个的计划。

使用方法

完成设置后,使用您自己的方式或其他包提供的方式在数据库中创建工作流配置。然后像使用zerohadero/laravel-workflow一样使用它们。在数据库中存储配置很容易为用户开发工作流。

待办事项

目前应通过事件订阅创建守卫。我有一个计划使用Symfony表达式作为上层守卫层。例如,您可以编写;

guard => $subject.isWaitingFor($user) || !$subject.isOwnedBy($user)

guard => $subject.isApprovers($user) || $subject.isReviewers($user)

然后该包会为您注入$subject和$user,并使用Symfony表达式评估转换的阻止。

测试

composer test

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

请审查我们的安全策略以了解如何报告安全漏洞。

鸣谢

许可协议

MIT许可(MIT)。有关更多信息,请参阅许可文件