Laravel 5.8: Как передать два аргумента событию и слушателю

#php #laravel #laravel-5.8 #laravel-events

Вопрос:

Я использую 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) {

Но здесь что-то не так, так как я получаю эту ошибку:

Слишком мало аргументов для функции AppListenersUserWalletNotification::handle(), 1 передан и ровно 2 ожидаемых

Итак, как решить эту проблему? Как я могу правильно передать два параметра событию и слушателю?


Обновление 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:

Вы должны удалить 2-й аргумент функции дескриптора. Вы можете получить доступ added_type к данным в $event переменной.

Комментарии:

1. Еще раз Too few arguments to function AppListenersUserWalletNotification::handle(), 1 passed and exactly 2 expected !! Что-то не так со public function handle(UserWalletNewTransaction $event, $added_type) { Слушателем

2. Возможно, вам придется опубликовать код функции обработки.

3. Там пусто. Я только что добавил ОБНОВЛЕНИЕ № 1 к вопросу.