php - Laravel:当我使用自定义请求类验证表单请求时出现错误“未定义的变量”
问题描述
在 Laravel (5.8) 控制器中,我尝试update()
为我的User
模型创建功能。我使用自己的类验证数据UpdateRequest
。当我把变量$user
放在这个类中时,我有错误Undefined variable: user
。
<?php
namespace App\Http\Requests\Users;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|string|alpha_dash|max:255|min:6',
'email' => ['required',
'string',
'email',
'max:255',
Rule::unique('users')->ignore($user->id)],
];
}
}
public function update(User $user, UpdateRequest $request)
{
$user->update($request->only(['name', 'email']));
return redirect()->route('users.index');
}
但是如果我validate
在控制器update()
方法中使用函数,一切正常。
public function update(User $user, Request $request)
{
$this->validate($request, [
'name' => 'required|string|alpha_dash|max:255|min:6',
'email' => 'required|string|email|max:255|unique:users,id,' . $user->id,
]);
$user->update($request->only(['name', 'email']));
return redirect()->route('users.index');
}
解决方案
In your custom request class, you don't have the $user
initialized and you try to use it, while in the controller method the $user
is passed as a parameter.
Note $this->user
in the Request returns the currently authenticated user, so make sure that you always want to use his ID, instead of an ID of the passed in user, hence the reason I am using request('user')
to get the user id from the URL.
So try this instead:
public function rules()
{
return [
'name' => 'required|string|alpha_dash|max:255|min:6',
'email' => ['required',
'string',
'email',
'max:255',
Rule::unique('users')->ignore(request('user'))],
];
}
推荐阅读
- apache-spark - Spark CSV:解析由 Ascii æ (Hex E6) 分隔的文件
- python - 即使我下载了较新版本的python,我似乎也没有 pip
- c# - 使用 Stack 机器用 Brouncer 公式逼近 PI
- laravel - 如何在 Laravel 中使用 Bulma 创建 Select2 多个值
- c++ - 未定义对“sqlite3_open”的引用。我没主意了
- java - 为什么乘法后我的乘积结果为 0
- mysql - 哪个是更好的做法:“检查主 ID 是否存在然后跳过”或“插入忽略”?
- tableau-api - 比较用户选择与两个不同的基准
- firebase - 从 Firestore 检索/处理图像 URL - React Native
- c# - 为什么在 Visual Studio 中重新启动调试之前,我总是必须在 IIS Express 中停止我的应用程序?