ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在命令被派发到处理器之前,你也可以将它通过"命令管道"传递到其他类去。命令管道操作上如 HTTP 中间件,除了是专门来给命令用的,例如,一个命令管道能够在数据库事务处理期间包装全部的命令操作,或者仅作为执行纪录。 要将管道添加到 bus,只要从App\Providers\BusServiceProvider::boot 方法调用调用员的pipeThrough 方法: `$dispatcher->pipeThrough(['UseDatabaseTransactions', 'LogCommand']);` 一个命令管道被定义在 handle 方法,就如个中间件: ~~~ class UseDatabaseTransactions { public function handle($command, $next) { return DB::transaction(function() use ($command, $next) { return $next($command); }); } } ~~~ 命令管道是透过 IoC 容器来达成,所以请自行在构造器类型提示所需的依赖。 你甚至可以定义一个 闭包 来作为命令管道: ~~~ $dispatcher->pipeThrough([function($command, $next) { return DB::transaction(function() use ($command, $next) { return $next($command); }); }]); ~~~