Laravel не может обрабатывать модель очереди, но способен обрабатывать код без очереди - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь настроить Events, Listeners и Jobs в одном из моих проектов. Код может работать, если я удаляю "Implements ShouldQueue". Но после того, как я включил в свой класс реализации ShouldQueue, он перестает работать

Мой EventServiceProvider


class EventServiceProvider extends ServiceProvider
{

    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        'App\Events\IncorpPaid' => [
            'App\Listeners\ProcessIncorpReceived',
        ],
    ];
}

Класс моего мероприятия

Namespace App\Events;

use App\Company;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class IncorpPaid
{
    use Dispatchable, SerializesModels;

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

}

Мой слушатель

namespace App\Listeners;

use App\Company;
use App\Events\IncorpPaid;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Http\Request;
use Illuminate\Queue\SerializesModels;

class ProcessIncorpReceived
{

    //use SerializesModels;
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {

    }

    /**
     * Handle the event.
     *
     * @param  IncorpPaid  $event
     * @return void
     */
    public function handle(IncorpPaid $event)
    {
        \App\Jobs\SendKYC::dispatch($event->company);
    }
}

И, наконец, мой код проблемы.

Следующие работы. Но проблема в том, что это не ставит работу в очередь.

namespace App\Jobs;

use App\Company;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class SendKYC
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle(Company $company)
    {
        //error_log(print_r($this->company->puc,true));
    //  error_log(print_r($company,true));
        \App\Services\SendDocsForSignature::processKYC($this->company);
    }
}

Но это ставит в очередь работу, но не работает. $ this-> company возвращает пустую модель компании.

namespace App\Jobs;

use App\Company;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class SendKYC implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle(Company $company)
    {
        \App\Services\SendDocsForSignature::processKYC($this->company);
    }
}

1 Ответ

0 голосов
/ 16 апреля 2019

Ваш последний фрагмент кода выглядит почти правильно. Вам просто нужно объявить переменную экземпляра, в которой вы хотите сохранить значение $company. Другими словами, вам нужно добавить protected $company; в ваш класс SendKYC, чтобы иметь возможность присвоить значение $company для $this->company.

Вы SendKYC класс должны начать так:

class SendKYC implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $company;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Company $company)
    {
        $this->company = $company;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...