Laravel отправляет данные из события в прослушиватель и получает неразрешимую ошибку разрешения зависимостей [Параметр # 0]

#laravel

#laravel

Вопрос:

в Laravel 7 у меня есть 2 события, такие как отправка кода активации и оплаты order_id , отправка кода активации работает нормально, но отправка order_id не работает, и я получаю эту ошибку:

 IlluminateContractsContainerBindingResolutionException
Unresolvable dependency resolving [Parameter #0 [ <required> $code ]] in class AppListenersPaymentTransactionListener 
  

EventServiceProvider содержимое класса:

 protected $listen = [
    'AppEventsUserAuthenticate' => [
        'AppListenersSMSNotification',
    ],
    'AppEventsPaymentTransactionEvent' => [
        'AppListenersPaymentTransactionListener',
    ],
];
  

событие тестирования:

 Route::get('/pass',function(){
    event(new PaymentTransactionEvent(12,123456,'this is only test'));
});
  

event класс:

 class PaymentTransactionEvent
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    private $code;
    private $orderId;
    private $storeTitle;

    private $smsPanelUsername;
    private $smsPanelPassword;
    private $smsPanelTelNumber;

    public function __construct($code, $orderId,$storeTitle)
    {
        $this->code = $code;
        $this->order_id = $orderId;
        $this->storeTitle = $storeTitle;

        $this->smsPanelUsername = '...';//$smsPanel->username;
        $this->smsPanelPassword = '...';//$smsPanel->password;
        $this->smsPanelTelNumber = '...';//$smsPanel->tel_number;
    }

    public function broadcastOn()
    {
        return new PrivateChannel('payment-transaction-event');
    }
}
  

listener класс:

 class PaymentTransactionListener
{
    private $code;
    private $orderId;
    private $storeTitle;

    public function __construct($code, $orderId, $storeTitle)
    {
        $this->code = $code;
        $this->orderId = $orderId;
        $this->storeTitle = $storeTitle;
    }

    public function handle(UserAuthenticate $event)
    {
        /* ... */
    }
}
  

как я могу решить эту проблему? я думаю, что я прошел $code внутрь listener .

приведенные ниже команды не смогли помочь мне решить эту проблему:

 php artisan optimize:clear

php artisan clear-compiled
  

Ответ №1:

Конструктору вашего прослушивателя ничего не передается. Параметры конструктора используются только для внедрения зависимостей. Нужные данные являются частью события, которое передается handle методу. Это точка события как контейнера для этой информации.

Вы должны создать переменные-члены public в вашем событии private , чтобы ваш слушатель не мог получить к ним доступ.

 class PaymentTransactionListener
{
    public function handle(PaymentTransactionEvent $event)
    {
        $event->code;
        $event->orderId;
        ...
    }
}