
本文旨在解决Lar*el中处理数组形式输入(如多语言字段)时,如何通过Form Request进行有效验证,并在Blade视图中精准地为每个数组元素显示其专属的验证错误信息及应用`is-invalid`样式。我们将深入探讨Blade `@error`指令与动态错误键的正确使用方式,并提供完整的代码示例和最佳实践。
在Lar*el应用开发中,处理多语言内容或动态生成的表单字段时,我们经常会遇到数组形式的输入,例如title[en]、title[es]等。Lar*el强大的验证机制能够很好地处理这类输入,但如何在Blade视图中为每个具体的数组元素精准地显示其验证错误信息,并应用相应的CSS样式(如Bootstrap的is-invalid),是开发者常遇到的一个问题。本文将详细阐述这一过程。
Lar*el的验证器能够轻松地对数组形式的输入进行批量验证。通常,我们推荐使用Form Request来封装验证逻辑,以保持控制器代码的整洁。
对于如title[en]、title[es]这样的输入,其HTML结构通常在一个循环中生成:
@foreach ($langs as $lang)
<input
type="text"
class="form-control"
name="title[{{$lang->isocode}}]"
id="title_{{$lang->isocode}}"
value="{{ old('title.' . $lang->isocode, $lang->title ?? '') }}"
>
@endforeach在Form Request中,我们可以使用.*通配符来为所有数组元素定义统一的验证规则:
// app/Http/Requests/YourFormRequest.php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class YourFormRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true; // 根据实际需求设置授权逻辑
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title.*' => ['required', 'string', 'max:100'], // 对所有title数组元素应用规则
];
}
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return [
'title.*.required' => '标题是必填项。',
'title.*.string' => '标题必须是字符串。',
'title.*.max' => '标题长度不能超过100个字符。',
];
}
}当验证失败时,Lar*el的$errors变量(一个Illuminate\Support\MessageBag实例)会包含针对具体数组元素的错误信息,例如'title.ca' => ['标题长度不能超过100个字符。']。这表明验证逻辑本身是正确的。
核心问题在于如何在Blade视图中正确地引用这些特定于数组元素的错误键。
许多开发者可能会尝试以下方式来动态地构造错误键:
{{-- 错误的语法示例 --}}
<input
type="text"
class="form-control @error('title.{{$lang->isocode}}') is-invalid @enderror"
name="title[{{$lang->isocode}}]"
{{-- ... 其他属性 --}}
>
@error('title.{{$lang->isocode}}')
<div class="invalid-feedback">{{ $message }}</div>
@enderror这种写法是错误的。Blade的@error指令期望一个字符串字面量或一个可以被解析为字符串的表达式作为其参数。在@error('...')内部,{{$lang->isocode}}并不会被Blade引擎提前解析为变量值,而是被当作字符串的一部分。因此,@error指令会尝试查找名为'title.{{$lang->isocode}}'的错误键,而不是像'title.en'或'title.es'这样的实际键。
要正确地为数组元素引用错误键,我们需要在Blade指令的参数中,使用PHP的字符串拼接或插值语法来动态构建完整的错误键。
方法一:使用字符串连接符 .
@error('title.' . $lang->isocode)
{{-- ... --}}
@enderror方法二:使用字符串插值(推荐,更简洁)
@error("title.{$lang->isocode}")
{{-- ... --}}
@enderror这两种方法都能确保@error指令接收到正确的错误键,例如当$lang->isocode为'en'时,它会收到'title.en'。
将正确的语法应用到Blade视图中,我们就能实现精准的错误显示和样式应用:
@foreach ($langs as $lang)
<div class="form-group mb-3"> {{-- 可以根据需要添加容器 --}}
<label for="title_{{$lang->isocode}}">标题 ({{ strtoupper($lang->isocode) }})</label>
<input
type="text"
class="form-control @error('title.' . $lang->isocode) is-invalid @enderror"
name="title[{{$lang->isocode}}]"
id="title_{{$lang->isocode}}"
value="{{ old('title.' . $lang->isocode, $lang->title ?? '') }}"
placeholder="请输入{{ strtoupper($lang->isocode) }}语言的标题"
>
@error('title.' . $lang->isocode)
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
@endforeach代码解释:
在Lar*el中处理数组形式的输入验证,并将其错误信息精准地呈现在Blade视图中,关键在于理解@error指令如何处理动态的错误键。通过使用字符串连接或插值(如'title.' . $lang->isocode或"title.{$lang->isocode}")来动态构建错误键,我们可以确保is-invalid类和详细的错误消息能够准确地应用到每个具体的数组输入元素上,从而大大提升用户体验和表单的可用性。遵循本文提供的代码示例和最佳实践,将帮助您更高效、更专业地构建Lar*el表单。
以上就是Lar*el数组输入验证:在Blade视图中精准显示错误信息的详细内容,更多请关注php中文网其它相关文章!
# 它会
# 拼多多联合推广营销方案
# 苏州网站建设培训学习
# 金华互联网营销策划推广
# 楼盘网站推广软文
# 助君网站建设
# 临沂网站建设高端
# 义乌网站建设哪个公司好
# seo市场混乱
# 义马北京网站建设
# 发卡平台网站建设
# 怎么改
# 有错误
# 正确地
# 不能超过
# css
# 插值
# 第一个
# 表单
# 错误信息
# 应用
# 多语言
# app
# bootstrap
# 前端
# html
# java
# laravel
# javascript
# php
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
快手极速版在线体验区 快手极速版网页体验入口
如何高效地基于键列值映射DataFrame中的多个列
《律学法考》查看学习数据方法
悟空浏览器网页版链接 悟空浏览器网页版最新有效地址
iPhone 15 Pro如何查看存储空间占用_iPhone 15 Pro存储空间查看教程
PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】
嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】
b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法
《绝区零》2.3前瞻|直播|内容介绍
三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧
sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程
荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复
曝《丝之歌》DLC有望开发!开发商还有神秘新企划
泰拉瑞亚水晶无法放置问题
小红书网页版怎么进 小红书网页版通用入口
邮政快递寄件查询入口 邮政快递收件查询入口
汽水音乐官网网页版入口 汽水音乐官网网页版在线入口
芒果TV官网登录入口 芒果TV官方网站登录入口
抖音号升级企业号怎么改名字?升级企业号有哪些好处?
天堂漫画网页版在线阅读 天堂漫画手机版入口
解决Flex容器横向滚动内容截断与偏移问题
如何用mysql实现客户反馈管理_mysql客户反馈数据库方法
ToDesk远程摄像头功能使用方法_ToDesk远程视频画面查看设置教程
Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型
J*aScript字符串_Unicode处理
Yandex浏览器官方入口_Yandex搜索引擎中文版
SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱
sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧
FullCalendar自定义按钮样式定制指南
163邮箱网页版官方登录入口 163邮箱网页版访问页面
《咸鱼之王》新版孙坚技能解析
在J*a里什么是行为抽象_抽象行为对代码复用的提升作用
百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法
海棠阅读登录教程_详细讲解海棠登录操作
使用Python和NLTK从文本中高效提取名词的实用教程
mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法
多闪电脑版下载_多闪PC端模拟器使用
mysql通配符能用于日志查询吗_mysql通配符在系统日志查询中的实际使用方法
如何发挥新媒体矩阵作用?新媒体矩阵怎么搭建?
基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口
poki官网最新入口 poki小游戏大全入口
网站体验不好=浪费钱:如何提升-用户体验效果差
Win10截图远程协助 Win10远程桌面截屏法【场景应用】
如何定制PrimeNG Sidebar的背景颜色
圆通快递官方入口不需要登录 在线查询入口快速查询
《U校园》学生登录入口2025
Win10怎么设置快速启动 Win10开启快速启动设置方法
暴风影音官网正式版_暴风影音手机版官网下载安卓
如何在CSS中使用伪类选择器_hover实现悬停效果
PHP魔术方法__set与__isset:设计考量、性能权衡与静态分析的视角
2025-11-30
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。