W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
所以,我們建立的命令該如何調(diào)用它呢?當(dāng)然,我們可以直接調(diào)用 handle 方法,然而使用 Laravel 的 "command bus" 來調(diào)用命令將會(huì)有許多優(yōu)點(diǎn),待會(huì)我們會(huì)討論這個(gè)部分。
如果你有瀏覽過內(nèi)置的基本控制器,將會(huì)發(fā)現(xiàn) DispatchesCommands trait ,它將允許我們?cè)诳刂破鲀?nèi)調(diào)用 dispatch 方法,例如:
public function purchasePodcast($podcastId)
{
$this->dispatch(
new PurchasePodcast(Auth::user(), Podcast::findOrFail($podcastId))
);
}
Command bus 將會(huì)負(fù)責(zé)執(zhí)行命令和調(diào)用 IoC 容器來將所需的依賴注入到 handle 方法。
你也可以將 Illuminate\Foundation\Bus\DispatchesCommands trait 加入任何要使用的類內(nèi)。若你想要在任何類的構(gòu)造器內(nèi)接收 command bus 的實(shí)體 ,你可以使用類型提示 Illuminate\Contracts\Bus\Dispatcher 這個(gè)接口。 最后,你也可以使用 Bus facade 來快速派發(fā)命令:
Bus::dispatch(
new PurchasePodcast(Auth::user(), Podcast::findOrFail($podcastId))
);
從請(qǐng)求映射要注入命令的屬性
映射 HTTP 請(qǐng)求到命令是很常見的,所以,與其要你針對(duì)每個(gè)請(qǐng)求苦命地進(jìn)行手動(dòng)對(duì)應(yīng),Laravel 則提供一些有用的方法來輕松達(dá)到,讓我們來看一下 DispatchesCommands trait 提供的 dispatchFrom 方法:
$this->dispatchFrom('Command\Class\Name', $request);
這個(gè)方法將會(huì)檢查這個(gè)被傳入的命令類的構(gòu)造器,并取出來自于 HTTP 請(qǐng)求的變量(或其他任何的 ArrayAccess 對(duì)象) 并將其填入構(gòu)造器,所以,若命令類在構(gòu)造器接受 firstName 參數(shù),command bus 將會(huì)試圖從 HTTP 請(qǐng)求取出 firstName 參數(shù)。
dispatchFrom 方法的第三個(gè)參數(shù)允許你傳入數(shù)組,那些不在 HTTP 請(qǐng)求內(nèi)的參數(shù)可用這個(gè)數(shù)組來填入構(gòu)造器:
$this->dispatchFrom('Command\Class\Name', $request, [
'firstName' => 'Taylor',
]);
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: