Laravel 5.8: 如何将两个参数传递给 Event 和 Listener

Laravel 5.8: How to pass two arguements to Event & Listener

我正在使用 Laravel 5.8 并创建了一个名为 UserWalletNewTransaction 的事件,如下所示:

public $transaction;
public $added_type;

public function __construct($transaction, $added_type)
{
    $this->transaction = $transaction;
    $this->added_type = $added_type;
}

如您所见,我在这里指定了两个参数,这些参数从控制器获取它们的值:

event(new UserWalletNewTransaction($newTransaction, $value_added_type));

然后名为 UserWalletNotification 的侦听器如下所示:

public function handle(UserWalletNewTransaction $event, $added_type) {

但是这里有问题,因为我收到了这个错误:

Too few arguments to function App\Listeners\UserWalletNotification::handle(), 1 passed and exactly 2 expected

那么如何解决这个问题呢?如何将两个参数正确传递给 Event & Listener?


更新 1

错误截图:

你可以使用数组。

event(new UserWalletNewTransaction([ 'transaction' => $newTransaction, 'added_type' => $value_added_type));
public $transaction;
public $added_type;

public function __construct($data)
{
    $this->transaction = $data['transaction'];
    $this->added_type = $data['added_type'];
}

更新#1:

您应该删除 handle 函数的第二个参数。您可以访问 $event 变量中的 added_type 数据。

UserWalletNewTransaction 事件:

public $transaction;
public $added_type;

public function __construct($transaction, $added_type)
{
    $this->transaction = $transaction;
    $this->added_type = $added_type;
}

你可以这样称呼event(new UserWalletNewTransaction($newTransaction, $value_added_type));

和 UserWalletNotification 侦听器:

public function handle(UserWalletNewTransaction $event)
{
    $transaction = $event->transaction;
    $added_type = $event->added_type;
}