如何在LaravelCollective表单标签内使用三元运算符
解决LaravelCollective表单添加错误样式的问题
嘿,我懂你遇到的麻烦了!原生HTML写法能正常根据错误状态给输入框加is-invalid类,但用LaravelCollective的Form::text时样式没生效——问题出在你把PHP三元表达式直接塞进了class的字符串参数里,这段代码会被当成普通文本解析,根本不会执行PHP逻辑。
下面给你几种靠谱的实现方式:
方式一:提前拼接好class字符串
先在模板里计算好完整的class值,再传入表单方法:
<?php // 先判断错误状态,拼接出正确的class字符串 $emailClass = 'form-control' . ($errors->has('email') ? ' is-invalid' : ''); ?> {!! Form::text('email', old('email'), [ 'class' => $emailClass, 'placeholder' => 'Email', 'required' => true, 'autofocus' => true ]) !!}
这里用old('email')填充用户之前输入的值,和你原生HTML的逻辑保持一致。
方式二:直接在数组参数中计算class
要是不想单独定义变量,也可以直接在class参数里完成拼接:
{!! Form::text('email', old('email'), [ 'class' => 'form-control' . ($errors->has('email') ? ' is-invalid' : ''), 'placeholder' => 'Email', 'required' => true, 'autofocus' => true ]) !!}
这种写法下,PHP会先执行三元表达式判断错误状态,再把结果和form-control拼接,最终生成正确的class属性值。
方式三:用Blade指令处理(更贴合模板风格)
如果习惯用Blade的语法,也可以这么写:
@php $emailClass = 'form-control' . ($errors->has('email') ? ' is-invalid' : ''); @endphp {!! Form::text('email', old('email'), [ 'class' => $emailClass, 'placeholder' => 'Email', 'required' => true, 'autofocus' => true ]) !!}
为啥原来的写法不行?
你之前的代码里,class的值是一整串字符串:"form-control ($errors->has('email')) ? ' is-invalid' : ''",浏览器会把这段内容直接当成class名称,根本不会执行里面的PHP判断逻辑,自然不会在错误时添加is-invalid类。
最后别忘了确认:你的项目已经正确安装并引入了LaravelCollective表单包,而且web中间件组里包含了ShareErrorsFromSession中间件(默认是自带的,别不小心删掉了),这样$errors变量才能在模板里正常使用。
内容的提问来源于stack exchange,提问作者Kiran Kumar P
相关产品推荐
相关产品推荐

