Невозможно отправить событие Laravel при выполнении расписания - PullRequest
0 голосов
/ 05 марта 2020

Я хочу запускать событие с именем ThriftStarted каждый раз, когда команда расписания выполняется успешно. Слушатель события GeneratePaymentSchedule должен обработать событие и сгенерировать графики платежей. Но мне кажется, что мне чего-то не хватает, поэтому при выполнении расписания расписание платежей не генерируется должным образом.

Вот как выглядит мой код Ядро. php

<?php

namespace App\Console;

use App\Thrift;
use App\Events\ThriftStarted;
...

class Kernel extends ConsoleKernel
{
    ...

    protected function schedule(Schedule $schedule)
    {
        // start thrift plan
        $schedule->call(function() {
            // get all open thrift plans
            $thrifts = Thrift::where('open', true)->get();

            // set open to false if contributors equals subscribers
            foreach ($thrifts as $thrift) {
                if ($thrift->contributors === $thrift->subscriptions->count()) {
                    $thrift->update(['open' => false]);

                    // dispatch thriftStarted event
                    event(new ThriftStarted($thrift));
                }
            }
        })->everyMinute();
    }

    ...
}

Событие ThriftStarted

<?php

namespace App\Events;

use App\Thrift;
...

class ThriftStarted
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

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

    ...
}

прослушиватель GeneratePaymentSchedule


<?php

namespace App\Listener;

use App\Payment;
use App\Events\ThriftStarted;
...

class GeneratePaymentSchedule
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  ThriftStarted  $event
     * @return void
     */
    public function handle(ThriftStarted $event)
    {
        if ($event->thrift->open === 0) {
            $subs = Subscription::where('thrift_id', $event->thrift->id)->get();
            $schedule = Carbon::parse(now())->toDateString();

            foreach ($subs as $sub) {
                Payment::create([
                    'user_id'       => $sub->user_id,
                    'thrift_id'     => $sub->thrift_id,
                    'contribution'  => $sub->thrift->contribution,
                    'schedule'      => $schedule,
                ]);

                $schedule = Carbon::parse($schedule)->addMonth()->toDateString();
            }
        }
    }
}

EventServiceProvider

<?php

...

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        App\Events\ThriftStarted::class => [
            App\Listener\GeneratePaymentSchedule::class,
        ]
    ];

    ...
}

Я что-то пропустил?

...