【问题标题】:Laravel 8 custom validation, get @error message in blade viewLaravel 8 自定义验证,在刀片视图中获取 @error 消息
【发布时间】: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-&gt;isocode}}') 不正确。

我做错了什么?

【问题讨论】:

  • @error(...) 是一个 Blade 指令,括号内的所有内容都是 PHP,但您正在尝试在其中使用 Blade Echo 语法......就像在 PHP 中通常那样连接字符串
  • 你是对的,正确的语法是@error('title.'.$lang-&gt;isocode) is-invalid @enderror

标签: php laravel laravel-8


【解决方案1】:
  =>title field validation you can use in request method  so remove this .{{$lang->isocode}} that is not correct.@error('title')  print your error message.

class="form-control @error('title') is-invalid @enderror"   
    
    @error('title')
                     <div class="invalid-feedback">{{ $message }}</div>
     @enderror           

【讨论】:

  • 我需要为每种语言取一个不同的名字...
【解决方案2】:

我认为您没有提供错误包索引的问题:

@foreach ($langs as $k=>$lang)
    <input 
        type="text" 
        class="form-control {{$errors->first('title.'.$k.'.'.$lang->isocode)?'is-invalid':''}}" 
        name="title[{{$lang->isocode}}]" 
        id="title[{{$lang->idioma->codi}}]"     
        value="{{ $lang->title }}"
    >
@endforeach

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 2017-06-28
    • 2017-12-13
    • 2020-12-07
    • 1970-01-01
    • 2020-07-18
    • 2013-09-03
    相关资源
    最近更新 更多