我想在任何用户更新后刷新当前页面
我正在尝试在用户模型中做类似的事情:
public static function boot()
{
self::updated(function ($model) {
return back(); //or redirect(Request::url())
});
}
但它不起作用。 如果有用户更新了如何刷新页面
一般来说,模型事件函数
creating
/created
/updating
/updating
/saved
/saving
应该只返回 false
或什么也不返回(void)。例如,在 updating
中返回 false(即:在模型保留在数据库中之前)会取消模型更新(这适用于所有传播事件,请参阅 https://laravel.com/docs/9.x/events #停止事件的传播)。
要在用户更新后“刷新”当前页面,您必须更具体地说明您的需求。您使用的
back()
函数(或别名 redirect()->back()
甚至 app('redirect')->back())
(据我所知)将在控制器中使用,并且它使用 Referer
标头或用户会话中的属性来确定将客户端发送到哪个页面。这最常用于验证错误,以便您可以将用户发送回他们来自的页面以及任何可能的验证错误消息。在事件中使用
back()
(或任何其他请求完成,如
return response()->json('mydata')
)是错误的,它甚至不起作用,因为此类事件的结果未用于完成请求。您“可以”做的唯一有效的事情是在事件中尝试validation,这反过来可能会抛出
ValidationException
,因此会被自动处理。您应该做的是使用实际处理更新用户的请求的控制器方法:
// UserController.php
/** (PUT) Update a user */
public function update(Request $request, User $user)
{
if($user->update($this->validate($request, [/* validations */])) {
return redirect()->back();
// or even be explicit and use `return redirect()->route('users.show', $user);`
}
// `update()` returned false, meaning one of the model events returned `false`
// (there is no exception thrown here).
session()->flash('alert-info', 'Something went wrong');
return redirect()->back();
}