[英]Laravel events not firing when injecting Dispatcher in model constructor
我試圖從工匠命令中將Laravel事件分派器注入模型的構造函數中,但無法從此依賴項中觸發訂閱的事件。
看起來Laravel注入了Illuminate \\ Events \\ Dispatcher的新實例,而不是重新使用Application調度程序。 我按照Jeff Way的Laracast視頻進行了實施。
我在app / start / global.php中添加了:
需要app_path()。 '/events.php';
這引用了一個名為events.php的文件,其中包含:
Event :: subscribe('MyApp \\ event \\ Handlers \\ MyEventHandler');
events.php文件具有一個subscription方法,具有以下3個相應的事件方法:
public function subscribe($events)
{
$events->listen('event.start', 'MyApp\event\Handlers\MyEventHandler@onStart');
$events->listen('event.error', 'MyApp\event\Handlers\MyEventHandler@onError');
$events->listen('event.complete', 'MyApp\event\Handlers\MyEventHandler@onComplete');
}
在Artisan命令中,我正在使用Laravel IoC通過以下方式創建模型:
$model = \App::make('MyApp\models\MyModel');
我的模型構造函數是:
use Illuminate\Events\Dispatcher;
class DataReplication {
protected $events;
public function __construct(Dispatcher $events)
{
$this->events = $events;
}
}
此時,將注入新的分派器實例,並且在事件處理程序(“ MyApp \\ event \\ Handlers \\ MyEventHandler”)中引用的所有偵聽器均不在偵聽器數組中。 因此,當使用$ this-> events-> fire('event.start');時, 沒有處理程序可以鈎住。
使用Facade Event :: fire('event.start');似乎有點不可思議。 來自同一模型的事件將在事件處理程序中觸發“ onStart”方法。
我有什么想念的嗎? 我的印象是,工匠命令位於應用程序旁邊的另一個范圍中,並且只有Laravel Facades才能與全局應用程序范圍綁定。
謝謝你的幫助。
使用\\Illuminate\\Contracts\\Events\\Dispatcher
代替Illuminate\\Events\\Dispatcher
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.