#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;
...
}
}