繁体   English   中英

laravel5.6使用请求表单验证后如何更新用户数据

[英]laravel5.6 How do I update user data after using Request Form validation

专业人士。

尽管我尝试使用表单请求,但无法将表单请求用于用户的更新操作。 我想使用表格要求。

正确地,请求表单的验证逻辑正在运行,但是之后,无法保存通过验证的数据。 (也没有错误,更新数据后应将其重定向。)

当我不使用表单请求(我直接在更新操作中编写验证逻辑和validate方法)时,通过验证后可以保存数据。

这是代码...

UsersController-具有验证逻辑

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', '情報を編集しました');
}

UsersController-使用表单请求

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM