如何解决Laravel 5.8:传递给事件侦听器的参数为空
我创建了一个名为 UserWalletNewTransaction.PHP
的事件并将其添加到其中:
public $transaction;
public function __construct($transaction) {
$this->$transaction = $transaction;
}
并且还在EventServiceProivder.PHP
注册:
use App\Listeners\UserWalletNotification;
protected $listen = [
UserWalletNewTransaction::class => [
UserWalletNotification::class,],
现在为了在控制器上触发此事件,我编写了以下代码:
$newTransaction = UserWalletTransaction::create(['user_id' => $user_id,'wallet_id' => $wallet_id,'creator_id' => $creator_id,'amount' => $amount_add_value,'description' => $trans_desc]);
event(new UserWalletNewTransaction($newTransaction));
然后在监听器,UserWalletNotification.PHP
,我尝试了:
public function handle(UserWalletNewTransaction $event) {
dd($event->transaction);
}
但它以某种方式返回null
。
但是,如果我改为 dd($event)
,我会得到这个:
那么这里出了什么问题?我可以在 user_wallet_transactions
正确插入新记录,变量 $newTransaction
应该包含 transaction
信息,但它不是。
这也是模型 UserWalletTransaction.PHP
:
protected $fillable = ['user_id','wallet_id','amount','description','creator_id'];
protected $table = 'user_wallet_transactions';
我非常感谢你们对此的任何想法或建议......
提前致谢。
更新 #1:
如果我在 dd($newTransaction)
之前在控制器上执行 event()
,我会得到:
更新 #2:
这是事件的完整代码,UserWalletNewTransaction.PHP
:
class UserWalletNewTransaction
{
use dispatchable,InteractsWithSockets,SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public $transaction;
public function __construct($transaction)
{
$this->$transaction = $transaction;
}
}
更新 #3:
以下是监听器中 dd($event)
的完整结果:
App\Events\UserWalletNewTransaction {#2533 ▼
+newTransaction: null
+socket: null
+"{"user_id":"373","wallet_id":"2","creator_id":2,"amount":"-60","description":null,"updated_at":"2021-07-18 13:33:59","created_at":"2021-07-18 13:33:59","id":61}": App\UserWalletTransaction {#2535 ▼
#fillable: array:5 [▼
0 => "user_id"
1 => "wallet_id"
2 => "amount"
3 => "description"
4 => "creator_id"
]
#table: "user_wallet_transactions"
#connection: "MysqL"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: true
#attributes: array:8 [▼
"user_id" => "373"
"wallet_id" => "2"
"creator_id" => 2
"amount" => "-60"
"description" => null
"updated_at" => "2021-07-18 13:33:59"
"created_at" => "2021-07-18 13:33:59"
"id" => 61
]
#original: array:8 [▼
"user_id" => "373"
"wallet_id" => "2"
"creator_id" => 2
"amount" => "-60"
"description" => null
"updated_at" => "2021-07-18 13:33:59"
"created_at" => "2021-07-18 13:33:59"
"id" => 61
]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▼
0 => "*"
]
}
}
解决方法
我刚刚发现了问题...您在执行 $this->$transaction
时应该是 $this->transaction
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。