Laravel 10嵌套验证:textarea有内容时需满足长度要求
Laravel 10 实现 meta[] 字段的条件验证规则
问题背景
项目中有1-20个名称为meta[]的textarea字段,HTML结构示例如下:
<div class="flex-1"> <label for="meta" class="mb-0 sm:w-1/4 sm:ltr:mr-2 rtl:ml-2">Addition Description</label> <textarea id="meta" name="meta[]" rows="5" class="form-textarea" data-markdown="true" placeholder=""></textarea> </div>
需要实现验证规则:若某个textarea填写了内容,则内容长度必须不少于30字符。当前验证规则的meta.*部分待完善:
/** * Get the validation rules that apply to the request. * * @return array */ public function rules(): array { return [ 'name' => [ 'required', Rule::unique('skills')->ignore($this->skill), ], 'ability' => [ 'required', Rule::in(Abilities::names()) ], 'type' => [ 'required', Rule::in(Types::names()) ], 'description' => [ 'required', 'min:30' ], 'meta.*' => [ Rule::requiredIf(fn () => dd($this) ) ] ]; }
解决方案
直接修改meta.*的验证规则,使用nullable、trim和min:30组合即可满足需求:
修改后的完整验证规则
/** * Get the validation rules that apply to the request. * * @return array */ public function rules(): array { return [ 'name' => [ 'required', Rule::unique('skills')->ignore($this->skill), ], 'ability' => [ 'required', Rule::in(Abilities::names()) ], 'type' => [ 'required', Rule::in(Types::names()) ], 'description' => [ 'required', 'min:30' ], 'meta.*' => [ 'nullable', 'trim', 'min:30' ] ]; }
规则说明
nullable:允许字段值为空(包括空字符串),不会触发后续验证规则trim:自动去除字段值首尾的空格,避免纯空格内容被误判为有效输入min:30:仅当字段值经过trim后非空时,验证其长度至少为30字符
这样就精准实现了需求:空的textarea不会触发验证,填写了有效内容的textarea必须满足长度要求。
内容的提问来源于stack exchange,提问作者Sasha
相关产品推荐
相关产品推荐

