Laravel 8 自定义unique验证规则时无法识别Request变量是什么原因
问题解决方案
错误根因
你遇到的Undefined variable: request报错是PHP闭包的作用域特性导致的:Rule::unique的where方法传入的匿名函数默认不能直接访问父作用域的$request变量,必须通过use关键字手动将外部变量导入闭包的作用域中。
修复代码
方式1:给闭包导入$request变量
public function storeSize(Request $request) { $validated = $request->validate( [ 'name' => [ 'required', Rule::unique('sizes')->where(function ($query) use ($request) { return $query->where('speciesId', $request->speciesId); }) ], 'speciesId' => 'required' ] ); }
方式2:更简洁的写法(无需闭包)
Laravel的Rule::unique支持直接链式调用where方法传入字段匹配条件,不需要额外写闭包,也就不需要处理作用域问题:
public function storeSize(Request $request) { $validated = $request->validate( [ 'name' => [ 'required', Rule::unique('sizes')->where('speciesId', $request->speciesId) ], 'speciesId' => 'required' ] ); }
内容的提问来源于stack exchange,提问作者Dahliar Ananda
相关产品推荐
相关产品推荐

