[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));