Laravel Livewire字符串验证规则失效问题求助
Laravel string验证规则失效问题
我编写了一个用于验证输入字段的validateData方法,代码如下:
public function validateData() { if($this->currentStep == 1){ $this->validate([ "name" => "required|string|max:255", "lastname" => "required|string", "email" => "required|email|unique:users", "mobile" => "required|string", "password" => "required|string" ]); }elseif($this->currentStep == 2){ $this->validate([ "address" => "required|string", "municipality" => "required|string", "profile_image" => "required|url", "biography" => "required|string" ]); } }
目前所有验证规则均正常生效,唯有string规则无法正常工作,请问是否有人遇到过类似问题,或是这属于一个Bug?
回答
这大概率不是Bug,而是你对Laravel string验证规则的预期和实际行为不符:
string规则的实际逻辑:它验证的是字段值可以被转换为字符串,而非严格要求值本身是原生字符串类型。比如数字、布尔值这类能转成字符串的类型,都会通过string规则的校验。如果你的输入是表单提交的,所有字段默认都是字符串类型(哪怕输入的是数字,提交后也是"123"这种字符串),所以string规则自然不会触发错误,看起来像是没生效。如果需要严格校验类型:要禁止数字、布尔等非字符串原生类型的输入,给规则加上
strict即可,比如:"name" => "required|string|strict|max:255",这样一来,当输入是数字类型(比如API请求里传的
123而非"123")时,就会被拦截。排查其他可能:检查项目里有没有自定义的验证规则覆盖了默认的
string规则,或者有没有全局的验证逻辑(比如服务提供者里的规则扩展)干扰了默认行为。测试方法:可以通过API传一个非字符串类型的参数(比如数字、布尔值)来测试,这时候
string规则应该会正常触发验证错误。
内容的提问来源于stack exchange,提问作者Raitiko
相关产品推荐
相关产品推荐

