Php 拉雷维尔:错误“;未定义变量";当我使用自定义请求类验证表单请求时

Php 拉雷维尔:错误“;未定义变量";当我使用自定义请求类验证表单请求时,php,laravel,validation,Php,Laravel,Validation,在Laravel(5.8)控制器中,我尝试为我的用户模型创建update()函数。 我使用自己的类UpdateRequest验证数据。当我把变量$user放到这个类中时,我有一个错误未定义的变量:user <?php namespace App\Http\Requests\Users; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class UpdateRequest exte

在Laravel(5.8)控制器中,我尝试为我的
用户
模型创建
update()
函数。 我使用自己的类
UpdateRequest
验证数据。当我把变量
$user
放到这个类中时,我有一个错误
未定义的变量: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');
    }

您需要将
$user->id
更改为
$this->user->id
,它应该可以正常工作。检查以下内容:

return [
            'name'  => 'required|string|alpha_dash|max:255|min:6',
            'email' => ['required',
                        'string',
                        'email',
                        'max:255',
                        Rule::unique('users')->ignore($this->user->id)],
         ];

希望它能帮助你

在自定义请求类中,您没有初始化
$user
并尝试使用它,而在控制器方法中,
$user
作为参数传递

注意
$this->user
在请求中返回当前经过身份验证的用户,因此请确保您始终希望使用他的ID,而不是传入用户的ID,因此我使用
请求('user')
从URL获取用户ID

因此,请尝试以下方法:

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

UpdateRequest类构造函数中缺少用户类实例,或者您可以尝试使用$this->User->id。这可能会对您有所帮助

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