codecamp

调用命令

所以,我们建立的命令该如何调用它呢?当然,我们可以直接调用 handle 方法,然而使用 Laravel 的 "command bus" 来调用命令将会有许多优点,待会我们会讨论这个部分。

如果你有浏览过内置的基本控制器,将会发现 DispatchesCommands trait ,它将允许我们在控制器内调用 dispatch 方法,例如:

public function purchasePodcast($podcastId)
{
    $this->dispatch(
        new PurchasePodcast(Auth::user(), Podcast::findOrFail($podcastId))
    );
}

Command bus 将会负责执行命令和调用 IoC 容器来将所需的依赖注入到 handle 方法。

你也可以将 Illuminate\Foundation\Bus\DispatchesCommands trait 加入任何要使用的类内。若你想要在任何类的构造器内接收 command bus 的实体 ,你可以使用类型提示 Illuminate\Contracts\Bus\Dispatcher 这个接口。 最后,你也可以使用 Bus facade 来快速派发命令:

    Bus::dispatch(
        new PurchasePodcast(Auth::user(), Podcast::findOrFail($podcastId))
    );

从请求映射要注入命令的属性

映射 HTTP 请求到命令是很常见的,所以,与其要你针对每个请求苦命地进行手动对应,Laravel 则提供一些有用的方法来轻松达到,让我们来看一下 DispatchesCommands trait 提供的 dispatchFrom 方法:

$this->dispatchFrom('Command\Class\Name', $request);

这个方法将会检查这个被传入的命令类的构造器,并取出来自于 HTTP 请求的变量(或其他任何的 ArrayAccess 对象) 并将其填入构造器,所以,若命令类在构造器接受 firstName 参数,command bus 将会试图从 HTTP 请求取出 firstName 参数。

dispatchFrom 方法的第三个参数允许你传入数组,那些不在 HTTP 请求内的参数可用这个数组来填入构造器:

$this->dispatchFrom('Command\Class\Name', $request, [
    'firstName' => 'Taylor',
]);
建立命令
命令队列
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

环境配置

系统服务

哈希

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }