kylwes / laravel-pipes
轻松地对单个数据对象进行链式操作和执行多个动作。
1.0.0
2023-02-28 18:29 UTC
Requires
- php: ^8.0
- illuminate/collections: ^9.0|^10.0
Requires (Dev)
- pestphp/pest: ^1.22
README
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 文件以获取详细信息。