在Laravel
7中,我有两个事件,如发送激活码和付款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;
...
}
}