簡體   English   中英

在模型構造函數中注入Dispatcher時,Laravel事件未觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM