[英]laravel5.6 How do I update user data after using Request Form validation
专业人士。
尽管我尝试使用表单请求,但无法将表单请求用于用户的更新操作。 我想使用表格要求。
正确地,请求表单的验证逻辑正在运行,但是之后,无法保存通过验证的数据。 (也没有错误,更新数据后应将其重定向。)
当我不使用表单请求(我直接在更新操作中编写验证逻辑和validate方法)时,通过验证后可以保存数据。
这是代码...
use Illuminate\Http\Request;
public function update(Request $request, $user) {
$user = User::findOrFail($user);
$request->validate([
'name' => [
'required',
'string',
'max:10',
'regex: /^[^ -~。-゚\x00-\x1f\t]+$/u'
],
'name_kana' => [
'required',
'string',
'max:20',
'regex: /^[^ -~。-゚\x00-\x1f\t]+$/u',
'regex: /^[ァ-ヶー]+$/u'
],
'email' => [
'required',
'string',
'email',
'max:255',
Rule::unique('users')->ignore($user->id),
],
'email_confirmation' => [
'required',
'same:email'
],
'birth_day' => [
'required',
'date'
],
'address' => [
'required',
'max:40',
'regex: /^[^ -~。-゚\x00-\x1f\t]+$/u'
],
'job_type_id' => [
'required'
],
]
);
$user->name = $request->name;
$user->name_kana = $request->name_kana;
$user->email = $request->email;
$user->birth_day = $request->birth_day;
$user->address = $request->address;
$user->job_type_id = $request->job_type_id;
$user->save();
return redirect('users/')->with('message', '情報を編集しました');
}
use App\Http\Requests\UserProfileUpdateRequest;
public function update(UserProfileUpdateRequest $request, $user) {
$user = User::findOrFail($user);
$user->name = $request->name;
$user->name_kana = $request->name_kana;
$user->email = $request->email;
$user->birth_day = $request->birth_day;
$user->address = $request->address;
$user->job_type_id = $request->job_type_id;
$user->save();
return redirect('users/')->with('message', '情報を編集しました');
}
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
// email項目で自分を無視するときにundefined $userの回避のため
use Illuminate\Support\Facades\Auth;
class UserProfileUpdateRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
// email項目で自分を無視するときにundefined $userの回避のため
$user = Auth::user();
return [
'name' => 'required|string|max:10|
regex:/^[^ -~。-゚\x00-\x1f\t]+$/u',
'name_kana' => 'required|string|max:20|
regex:/^[^ -~。-゚\x00-\x1f\t]+$/u|
regex:/^[ァ-ヶー]+$/u',
'email' => ['required', 'string', 'email',
Rule::unique("users")->ignore($user->id)],
'email_confirmation' => 'required|email|same:email',
'birth_day' => 'required|date',
'address' => 'required|max:40|
regex:/^[^ -~。-゚\x00-\x1f\t]+$/u',
'job_type_id' => 'required',
'password' => 'required|min:4|max:8|
regex:/^[a-zA-Z0-9]+$/u',
];
}
}
它应该是 :
return redirect('/users')->with('message', '情報を編集しました');
不:
return redirect('users/')->with('message', '情報を編集しました');
您是否试图在变量中捕获经过验证的数据:
$validatedData = $request->validate(...);
(如docs中所指定)。
validate()
方法将在检查后返回所有清理过的数据,因此您将捕获此返回值。
然后,使用新变量将字段保存到记录中:
$user->name = $validatedData->name;
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.