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

Posted

技术标签:

【中文标题】Laravel 5.8:如何将两个参数传递给 Event 和 Listener【英文标题】:Laravel 5.8: How to pass two arguements to Event & Listener 【发布时间】:2021-09-26 21:06:04 【问题描述】:

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

public $transaction;
public $added_type;

public function __construct($transaction, $added_type)

    $this->transaction = $transaction;
    $this->added_type = $added_type;

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

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

然后名为UserWalletNotification 的监听器是这样的:

public function handle(UserWalletNewTransaction $event, $added_type)

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

函数 App\Listeners\UserWalletNotification::handle() 的参数太少,通过了 1 个,预期正好有 2 个

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


更新 1

错误截图:

【问题讨论】:

【参考方案1】:

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;

【讨论】:

【参考方案2】:

你可以使用数组。

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:

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

【讨论】:

再次Too few arguments to function App\Listeners\UserWalletNotification::handle(), 1 passed and exactly 2 expected !!监听器的public function handle(UserWalletNewTransaction $event, $added_type) 有问题 也许你得贴句柄功能代码。 它是空的。我刚刚添加了一个 UPDATE #1 来提问。

以上是关于Laravel 5.8:如何将两个参数传递给 Event 和 Listener的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给 Laravel 5 中的隐式控制器?

将 2 个参数传递给 Laravel 路由 - 资源

如何使用 Laravel 任务调度将参数传递给命令

如何将 JSON 返回数据作为参数传递给 URL 路由(laravel)

如何将 url 中的参数传递给背包创建表单

如何将参数传递给 Laravel 包中的控制器操作?