【发布时间】:2021-10-27 12:35:51
【问题描述】:
其实我遇到了一个问题。每当任何模式、任何用户和任何表格中发生任何更新时,我都需要向管理员发送通知。
澄清更多:
我有一个客户、一家公司和一个员工。 在每个部分下,我有很多表(例如:在客户下我有客户的个人资料表,在公司下我有很多表对应于公司的律师,公司的文件等......,类似于员工)
因此,相应地,我有很多控制器,因此有很多 update 方法。
所以为了在任何用户的任何情况下发生任何更新时向管理员发送通知。我必须在 ALL update METHODS 下包含通知语句 $admin->notify(new UpdateIsMade()); 太烦人了!
这是一种冗余。
我真正想要的方法是找到一个解决方案,让我在任何表下的任何用户发生任何更新时自动向管理员发送通知。
我尝试创建一个middleware 函数,并尝试在客户端用户下发生任何更新时发送通知(采样类型):
public function handle(Request $request, Closure $next)
{
$clients = \App\Client::all();
foreach ($clients as $client) {
if($client->user->wasChanged()){
$arr_of_changes = $client->user->getChanges();
$admin=User::where('profile_type' , 'App\Admin')->first();
$admin->notify(new UpdateIsMade($arr_of_changes,$original_arr));
}
}
return $next($request);
}
很遗憾,这个中间件不起作用。
我想问题是$client->user->wasChanged() 在更新发生时并没有给出真实值。看起来wasChanged 只能在update 方法中的save 进程之后起作用。
对我的问题有什么建议吗?感谢您抽出宝贵的时间,很抱歉您的文字太长了!
【问题讨论】:
-
你应该考虑实现一个观察者来实现这一点。
标签: laravel