Laravel 5.8:传递给事件侦听器的参数变为空
Posted
技术标签:
【中文标题】Laravel 5.8:传递给事件侦听器的参数变为空【英文标题】:Laravel 5.8: Parameter passed to the event listener is getting null 【发布时间】:2021-09-26 08:21:30 【问题描述】:我创建了一个名为 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));
然后在 Listener,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:
如果我在event()
之前在控制器上执行dd($newTransaction)
,我会得到:
更新 #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 => "*"
]
【问题讨论】:
如果你在dd($newTransaction)
之前event
会发生什么?
@matiaslauriti 我刚刚添加了一个 UPDATE #1。
所以记录被创建。我很困惑......
@matiaslauriti 是的,可以创建记录,事件中必须有 UserWalletNewTransaction.php
。我把它的整个代码作为 UPDATE #2.
【参考方案1】:
我刚刚发现了问题......你正在做$this->$transaction
,而它应该是$this->transaction
。
【讨论】:
谢谢!这是一个愚蠢的错误哈哈【参考方案2】:我也遇到了这个问题,如果是这样的话:删除事件属性中的下划线。 ($_order 必须是 $order)
【讨论】:
以上是关于Laravel 5.8:传递给事件侦听器的参数变为空的主要内容,如果未能解决你的问题,请参考以下文章