Laravel Livewire密码验证报错:validatePassword方法不存在
问题
在Laravel中可正常运行的密码验证规则迁移到Livewire后无法生效,出现两类报错:
- 使用以下规则时,报错
Method Illuminate\Validation\Validator::validatePassword does not exist:
'password' => 'required|confirmed|Password::min(8) ->mixedCase() ->letters() ->numbers() ->symbols() ->uncompromised()',
- 修改为以下规则时,出现
mixedCase、letters等方法不存在的错误:
'password' => 'required|confirmed|min:8 ->mixedCase() ->letters() ->numbers() ->symbols() ->uncompromised()'
解决方案
Livewire的验证规则逻辑和Laravel完全一致,但不能把规则对象的方法链写在字符串里,需改用数组形式组合规则:
- 首先在Livewire组件顶部引入Laravel密码规则类:
use Illuminate\Validation\Rules\Password;
- 在组件的
rules()方法中按如下方式定义规则:
public function rules() { return [ 'password' => [ 'required', 'confirmed', Password::min(8) ->mixedCase() ->letters() ->numbers() ->symbols() ->uncompromised() ], ]; }
错误原因说明
- 第一种错误:把
Password::min()这类规则对象当成了字符串形式的验证规则,Laravel验证器会尝试寻找名为validatePassword::min(8)...的验证方法,自然找不到对应方法。 - 第二种错误:直接在字符串后拼接PHP方法链,属于语法错误,字符串无法调用PHP方法。
内容的提问来源于stack exchange,提问作者upcoming
相关产品推荐
相关产品推荐

