kylwes/laravel-pipes

轻松地对单个数据对象进行链式操作和执行多个动作。

1.0.0 2023-02-28 18:29 UTC

This package is auto-updated.

Last update: 2024-09-28 22:00:10 UTC


README

Latest Version on Packagist Total Downloads

Laravel Pipes 是一个 PHP 库,允许您轻松地对单个数据对象进行链式操作和执行多个动作。它受到 Unix 管道概念的启发,其中一个命令的输出可以用作另一个命令的输入。

$user = $createUser->execute($request->validated());
$sendWelcomeEmail->execute($user);

您可以编写这个

$user = pipe($request->validated(), [
    CreateUser::class,
    SendWelcomeEmail::class,
]);

安装

您可以通过 composer 安装此包

composer require kylwes/pipe

使用方法

您可以使用 pipe 函数创建管道

$user = pipe($request->validated(), [
    CreateUser::class,
    SendWelcomeEmail::class,
]); // $user is an instance of App\Models\User

当您的某个动作需要另一个参数时,您可以使用 with 方法

// App\Actions\AssignRoleToUser.php
class AssignRoleToUser
{
    public function execute(User $user, $role)
    {
        $user->assignRole($role);
        
        return $user;
    }
}

// App\Http\Controllers\UserController.php
$user = pipe($request->validated())
    ->with(['role' => Role::find(1)])
    ->through([
        CreateUser::class,
        AssignRoleToUser::class,
        SendWelcomeEmail::class,
    ]); // $user is an instance of App\Models\User

您还可以传递匿名函数

$user = pipe($data, [
    CreateUser::class,
    function ($user) {
        $user->assignRole(Role::find(1));
        
        return $user;
    },
    SendWelcomeEmail::class,
]); // $user is an instance of App\Models\User

或调用一个函数

$title = pipe('  My awesome title   ', [
    'trim',
    'strtoupper',
]); // $title is 'MY AWESOME TITLE'

您还可以通过使用 ->each() 方法将数组或集合中的每个单独项目进行管道操作

$users = pipe($users)
    ->each()
    ->through([
        ResetAnswers::class,
        InviteForNextSession::class,
    ]);

测试

composer test

变更日志

请参阅 变更日志 了解最近更改的详细信息。

贡献

欢迎贡献!如果您发现错误或有功能请求,请打开 GitHub 上的问题。如果您想贡献代码,请分支仓库并提交一个 pull request。

致谢

许可

Laravel Pipes 在 MIT 许可证下发布。请参阅 LICENSE 文件以获取详细信息。