首页 > 解决方案 > 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');
    }

标签: phplaravelvalidation

解决方案


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'))],
         ];
}

推荐阅读