首页 > 解决方案 > Laravel 控制器验证请求不存在

问题描述

我正在使用 Laravel 8 验证,我正在尝试做的是验证一个带有一些输入名称的表单,它是表 Sizes 列“名称”所独有的,它还取决于另一个列speciesId,即来自 $request-> 的值物种编号。

Controller中的功能是这样的

    public function storeSize(Request $request)
    {
        $validated = $request->validate(
            [
                'name' => [
                    'required', Rule::unique('sizes')->where(function ($query) {
                        return $query->where('speciesId', $request->speciesId);
                    })
                ],
                'speciesId' => 'required'
            ]
        );
    }

已经添加使用 Illuminate\Http\Request;使用 Illuminate\Validation\Rule;但仍然得到“ErrorException 未定义变量:请求”。

当我尝试 var_dump($request) 或 echo $request->speciesID 时,变量和值存在。

我的问题是,为什么验证函数不能识别 Request 变量?

标签: functionvalidationrequestuniquelaravel-8

解决方案


发生错误是因为您的function通话内部$request不可用。use $request您需要通过添加来使其可用function ($query)

$validated = $request->validate([
  'name' => [
    'required', Rule::unique('sizes')->where(function ($query) use ($request) {
       return $query->where('speciesId', $request->speciesId);
     })
  ],
  'speciesId' => 'required'
]);

推荐阅读