🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在命令被派发到处理器之前,你也可以将它通过"命令管道"传递到其他类去。命令管道操作上如 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); }); }]); ~~~ ~~~