在 Eloquent 模型观察器中使用请求
Using Request within Eloquent Model Observer
在 Laravel 5.3 中,我们正在尝试创建一个表单,用户可以在其中更新他们的个人资料详细信息,包括新密码。
但是我们只想在提交密码后设置密码。
我们正在使用处理模型更新的 CRUD 框架,我们不想推出自己的 update(Request $request)
方法。
我们知道您可以注册类似于
的模型观察者
User::created(function(User $user){
});
我们希望实现类似于
的东西
User::created(function(User $user){
if( $request->has('password') ){
$user->password = bcrypt($request->input('password'));
}
});
然而,当我们访问$request时,它完全是空的。例如,如果我们 dd($request->all());
它是一个空数组,但是如果我们转储 dd($_POST);
我们会得到所有东西。
我认为这是因为加载顺序的原因,而请求系统尚未加载。
有没有一种方法我们可以在不直接访问 $_POST
的情况下获取请求?
谢谢
您可以将 request
辅助函数用作:
if( request()->has('password') ){
$user->password = bcrypt(request()->get('password'));
}
Laravel 5.3+
request()
助手应该为您工作:
if (request()->has('password')) {
$user->password = bcrypt(request()->password);
}
您可以通过以下方式访问 属性:
request()->password
request()->get('password')
request('password')
流明 5.3+
request()
助手在 Lumen 中不可用,因此您需要使用 IoC 容器。
app('Illuminate\Http\Request')
示例:
if (app('Illuminate\Http\Request')->has('password')) {
$user->password = bcrypt(app('Illuminate\Http\Request')->password);
}
作为其他两个答案的替代方法,您可以将请求传递给函数:
User::created(function(User $user) use ($request) {
在 Laravel 5.3 中,我们正在尝试创建一个表单,用户可以在其中更新他们的个人资料详细信息,包括新密码。
但是我们只想在提交密码后设置密码。
我们正在使用处理模型更新的 CRUD 框架,我们不想推出自己的 update(Request $request)
方法。
我们知道您可以注册类似于
的模型观察者User::created(function(User $user){
});
我们希望实现类似于
的东西User::created(function(User $user){
if( $request->has('password') ){
$user->password = bcrypt($request->input('password'));
}
});
然而,当我们访问$request时,它完全是空的。例如,如果我们 dd($request->all());
它是一个空数组,但是如果我们转储 dd($_POST);
我们会得到所有东西。
我认为这是因为加载顺序的原因,而请求系统尚未加载。
有没有一种方法我们可以在不直接访问 $_POST
的情况下获取请求?
谢谢
您可以将 request
辅助函数用作:
if( request()->has('password') ){
$user->password = bcrypt(request()->get('password'));
}
Laravel 5.3+
request()
助手应该为您工作:
if (request()->has('password')) {
$user->password = bcrypt(request()->password);
}
您可以通过以下方式访问 属性:
request()->password
request()->get('password')
request('password')
流明 5.3+
request()
助手在 Lumen 中不可用,因此您需要使用 IoC 容器。
app('Illuminate\Http\Request')
示例:
if (app('Illuminate\Http\Request')->has('password')) {
$user->password = bcrypt(app('Illuminate\Http\Request')->password);
}
作为其他两个答案的替代方法,您可以将请求传递给函数:
User::created(function(User $user) use ($request) {