学习用于Laravel的超级管道软件包

61 阅读1分钟

[chefhasteeth/pipeline]软件包为Laravel的内置管道功能增加了一些独特的功能。例如, 这个包有一个withTransaction() 方法, 它将在一个数据库事务中运行这个管道, 并根据管道是否成功而自动提交(或回滚):

 use Chefhasteeth\Pipeline\Pipeline;
 
 
// i.e., controller method
public function store(StoreRegistrationRequest $request)
{
    return Pipeline::make()
        ->withTransaction()
        ->send($request->all())
        ->through([
            RegisterUser::class,
            AddMemberToTeam::class,
            SendWelcomeEmail::class,
        ])
        ->then(fn ($data) => UserResource::make($data));
}

接下来,这个包也有一个Pipable 特质,你可以在一个数据对象或类上实现。

use Chefhasteeth\Pipeline\Pipable;
 
class UserDataObject
{
    use Pipable;
 
    public string $name;
    public string $email;
    public string $password;
    // ...
}
 
// Run the pipeline
return UserDataObject::fromRequest($request)
    ->pipeThrough([
        RegisterUser::class,
        AddMemberToTeam::class,
        SendWelcomeEmail::class,
    ])
    ->then(fn ($data) => UserResource::make($data));