php キュー - Laravel 5イベントハンドラが起動しません




event login (5)

だから私は新しいLaravel 5 Event方法論を試しています。

私のリポジトリでは、 "KitchenStored"というイベントを次のように起動しています。

//  Events
use App\Events\KitchenStored;

class EloquentKitchen implements KitchenInterface {

    public function store($input) {
        $kitchen        = new $this->kitchen;
        $kitchen->name  = $input['name'];
        $kitchen->save();

        \Event::fire(new KitchenStored($kitchen));

        return $kitchen;
    }

これは正常にこのイベントを発生させます:

<?php namespace App\Events;

use App\Events\Event;

use Illuminate\Queue\SerializesModels;

class KitchenStored extends Event {

    use SerializesModels;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($kitchen)
    {
        $this->kitchen  = $kitchen;
    }

}

しかし、それはこのハンドラにリンクしません:

<?php namespace App\Handlers\Events;

use App\Events\KitchenStored;

use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldBeQueued;

class AttachCurrentUserToKitchen {

    /**
     * Create the event handler.
     *
     * @return void
     */
    public function __construct()
    {
        dd('handler');
    }

    /**
     * Handle the event.
     *
     * @param  KitchenStored  $event
     * @return void
     */
    public function handle(KitchenStored $event)
    {
        //
    }

}

これは私が知っているのでdd( 'handler'); リクエストのライフサイクル中には発生しません。

私はここでそのリスナーにイベントを登録しました:

<?php namespace App\Providers;

use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider {

    /**
     * The event handler mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        App\Events\KitchenStored::class => [
            App\Handlers\Events\AttachCurrentUserToKitchen::class
        ]
    ];

    /**
     * Register any other events for your application.
     *
     * @param  \Illuminate\Contracts\Events\Dispatcher  $events
     * @return void
     */
    public function boot(DispatcherContract $events)
    {
        parent::boot($events);
        Event::listen('App\Events\KitchenStored',
                    'App\Handlers\Events\AttachCurrentUserToKitchen');
    }

}

私が今までで最もきれいなコードを使い続けることができるように誰かがこのプロセスをよりよく説明することができますか?

どうもありがとう


Answers

私は同様の問題を抱えていて、私はvendor \ compile.phpファイルを削除することによってそれを修正しました。 それから私は再び "composer update"を実行し、そして今度は予想通りにハンドラが起動しています。


私は走った

composer dumpautoload

に続く

php artisan clear-compiled

それから私のでき事は発砲し始めた。


php artisan optimizeを実行している場合、イベントハンドラはリスニングを開始するはずです。

そのためのlarachat slack channelからmattstaufferへのクレジット。


EventServiceProvider.phpでは、 ::class表記を使用してクラスを参照するときに先頭の\含めます。

protected $listener = [
    \App\Events\KitchenStored::class => [
      \App\Handlers\Events\AttachCurrentUserToKitchen::class,
    ],
];

use文を追加してリスナマッピングを短くすることもできuse

use App\Events\KitchenStored;
use App\Handlers\Events\AttachCurrentUserToKitchen;
...
protected $listener = [
    KitchenStored::class => [
      AttachCurrentUserToKitchen:class,
    ],
];

あるいは単に文字列表記を使う:

protected $listener = [
    'App\Events\KitchenStored' => [
      'App\Handlers\Events\AttachCurrentUserToKitchen',
    ],
];

.live()代わりに.bind()を使用してみてください。 .live()は、Ajaxリクエストの実行後に.hoverをチェックボックスにバインドします。





php events laravel laravel-5