Laravel将数据从Event发送到Listener,并获得无法解决的依赖项解析[Parameter#0]错误



Laravel7中,我有两个事件,如发送激活码和付款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)
{
/* ... */
}
}

我该如何解决这个问题?我想我在listener里面通过了$code

以下命令不能帮助我解决这个问题:

php artisan optimize:clear
php artisan clear-compiled

侦听器的构造函数没有传递任何内容。构造函数的参数仅用于依赖项注入。所需的数据是传递给handle方法的Event的一部分。这就是事件作为此信息容器的意义所在。

您应该使Event上的成员变量public而不是private,以便Listener可以访问它们。

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

最新更新