【发布时间】:2022-01-21 00:22:23
【问题描述】:
我在 array 的刀片视图中有两个输入(每个输入用于不同的语言),我构建如下:
@foreach ($langs as $lang)
<input
type="text"
class="form-control @error('title.{{$lang->isocode}}') is-invalid @enderror"
name="title[{{$lang->isocode}}]"
id="title[{{$lang->idioma->codi}}]"
value="{{ $lang->title }}"
>
@endforeach
我的自定义Form Request Validation是这样的:
public function rules()
{
return [
'title.*' => ['required', 'string', 'max:100'],
];
}
public function messages()
{
return [
'title.*.required' => 'Title is required',
'title.*.string' => 'Title must be a string',
'title.*.max' => 'Title is too long',
];
}
而且效果很好。其实如果我@dump($errors),就说明:
Illuminate\Support\ViewErrorBag {#353 ▼
#bags: array:1 [▼
"default" => Illuminate\Support\MessageBag {#354 ▼
#messages: array:1 [▼
"title.ca" => array:1 [▼
0 => "Title is too long"
]
]
#format: ":message"
}
]
}
但问题是,如果验证失败,.is-invalid 类不会应用在输入 html 标记中。我认为是因为@error('title.{{$lang->isocode}}') 不正确。
我做错了什么?
【问题讨论】:
-
@error(...)是一个 Blade 指令,括号内的所有内容都是 PHP,但您正在尝试在其中使用 Blade Echo 语法......就像在 PHP 中通常那样连接字符串 -
你是对的,正确的语法是
@error('title.'.$lang->isocode) is-invalid @enderror。