我创建了一个名为 UserWalletNewTransaction.php
的事件,并将其添加到其中:
public $transaction;
public function __construct($transaction) {
$this->$transaction = $transaction;
}
并且还在 EventServiceProivder.php
处注册了它:
use App\Listeners\UserWalletNotification;
protected $listen = [
UserWalletNewTransaction::class => [
UserWalletNotification::class,
],
现在为了在 Controller 上触发此事件,我编写了以下代码:
$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:
如果我在event()
之前在 Controller 上执行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 => "*"
]
}
}
最佳答案
我刚刚发现了问题...您正在执行 $this->$transaction
,而它应该是 $this->transaction
。
关于php - 拉拉维尔 5.8 : Parameter passed to the event listener is getting null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68427467/