【发布时间】:2020-01-19 01:52:05
【问题描述】:
新的@error 指令是introduced in Laravel 5.8.13。所以,不要这样做:
// old
@if ($errors->has('email'))
<span>{{ $errors->first('email') }}</span>
@endif
您现在可以这样做了
// new
@error('email')
<span>{{ $message }}</span>
@enderror
但是,我在尝试仅针对几个类似输入字段中出现错误的输入字段时遇到了问题。这些字段相似,因为它们具有相同的名称。但它们也处于单独的表单中,并且具有不同的提交按钮。
我的 html 刀片文件设置有多个从 @forelse 语句生成的输入。我创建了一个简单的错误检查来检查是否输入了负数并重定向回带有错误消息的同一页面。 @error 指令还用于插入一个自定义类来定位输入字段以进行样式设置。
@forelse($accounts as $account)
<form method="POST" action="{{ route('account.update', $account->id) }}">
@csrf
<div>
<input type="number" name="credit" class="@error('credit') is-invalid @enderror" required>
<input type="submit" class="btn" value="ok">
@error('credit')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</form>
@empty
@endforelse
表单提交给AccountController.php中的update()方法
public function update(Request $request, Account $account)
{
if($request->input('credit') < 0)
{
return back()->withErrors(['credit'=>'enter a positive amount']);
}
// ... other logic
}
问题在于,当在一个输入字段中输入负数时,错误消息会针对每个具有相同名称的输入显示,即使它们的格式不同也是如此。
我认为使输入名称唯一可以解决这个问题,但这会使我的后端逻辑比所需的更复杂。
有没有办法在重定向后只显示目标输入的错误消息,而不必为每个输入字段使用唯一的名称?
【问题讨论】:
-
既然你没有使用Validator,为什么不直接使用JS来检查一个正数呢?然后,您可以单独定位每个字段。但是在服务器端,您可以使用一条错误消息,但您必须通过设置不同的名称来使每个字段唯一。一页上有多个表单的缺点。
-
@nakov,在使用 javascript 之前,我希望页面功能齐全。这只是我首选的网络编码方式。
-
没关系,那么您必须通过为输入字段指定不同的名称并覆盖错误消息来区分输入字段。否则这将是一个混乱的方式来实现它。我知道一个,但我不会分享它,因为它很丑。
-
@nakov,你的意思是
@error指令总是与给定的输入名称相关联吗? -
@error 指令只是根据作为输入名称的键从元素数组中提取,所以是的,它与具有给定名称的输入相关联。所以下面的解决方案也是我想到的,但我更喜欢使用 JS 进行这样的验证。当您验证只是检查数字是否为正时..
标签: php laravel laravel-blade laravel-5.8