【问题标题】:Override laravel validation message覆盖 laravel 验证消息
【发布时间】:2018-01-31 02:05:24
【问题描述】:

我正在构建一个上传多个文件的表单,它工作正常,但问题是我的验证消息,我的验证是检查文件的 mime 类型。

假设上传的文件名为filename

验证消息: file.0 必须是以下类型的文件:pdf、doc、docx、jpeg、jpg、png、bnp。

我想把它改成 文件名必须是文件类型:pdf、doc、docx、jpeg、jpg、png、bnp。

我的表格:

{!! Form::open(['route' => ['file.store'], 'method'=> 'POST', 'id' => 'file_form','files' => 'true']) !!}

{!!Form::FILE('file[]', ['id' => 'file','multiple' =>true])!!}

 <button type="submit" name="submit">save</button>
{!! Form::close() !!}

我的表单请求验证

foreach ($this->file as $key => $val)       
             {                                                

$rules['file.' . $key] = 'mimes:pdf,doc,docx,jpeg,jpg,png,bnp|extension|max:10240'

             }                                             


return rules;     

【问题讨论】:

  • 能否请您发布请求文件代码?
  • 对于file.1我的意思是对其他人来说应该是什么
  • @user2486 我想用文件名本身替换 file.1

标签: php laravel validation


【解决方案1】:

在表单请求中,您可以像下面这样简单地使用它:

public function messages()
{
    $messages = [];
    foreach($this->request->get('files') as $key => $val)
    {
        $messages['files.'.$key. ". max"] = 'The file field cannot be greater then 10M';
    }
    return $messages;

}                                           

【讨论】:

    【解决方案2】:

    我适合你们所有人的答案,我找到了另一种适合我的项目的方法。我创建了名为 custom_mimes 的自定义验证,以根据 mime 类型验证文件类型,并将 custom replacer (:filename) 添加到此验证中。

      \Validator::extend('custom_mimes', function ($attribute, $file, $parameters, $validator)
            {
    
               $validator->addReplacer('custom_mimes',  function ($message, $attribute, $rule, $parameters) use ($file)
                {
                  $values=implode(',',$parameters);
                  return str_replace([':filename',':values'], [$file->getClientOriginalName(),$values], $message);
                });
    
                $mime_type =$file->guessExtension();
                return in_array($mime_type,$parameters);
    
            });  
    

    validation.php

    'custom_mimes'         => 'The :filename must be a file of type: :values.',
    

    所以我的键和值将是:

    :filename => 上传的文件名

    :values =>'jpg,png,doc,docx'

    【讨论】:

      【解决方案3】:

      使用自定义验证消息

      将此行添加到validation.phpresource/lang/en/ 文件夹内的自定义数组中

      'custom' => [
        .........
        'file.*' => [
          'mimes' => 'The filename must be a file of type: :values.',
        ],
      

      我建议,将 file 重命名为 unique_name 以免与名称冲突

      【讨论】:

      • 好的,我知道这个答案,但你误解了我的问题,支持我上传了名称为 (test,image) 的文件,我希望消息是测试必须是文件类型: :values . , 并且图像必须是文件类型: :values.
      【解决方案4】:

      您好,如果您使用 FormRequest 进行验证。

      这就是我实现它的方式。 这是一个例子。

      public function messages()
       {
        $messages = [];
        foreach($this->request->get('items') as $key => $val)
          {
            $messages['items.'.$key.'.max'] = 'The field labeled "Book Title '.$key.'" must be less than :max characters.';
          }
       return $messages;
      }
      

      【讨论】:

      • 你好,我应该在哪个文件中添加这个功能?它显然没有写在文档中。你能帮忙吗?
      • @DushyantJoshi 如果您使用 formRequest 进行验证,那么您可以使用此请求类
      猜你喜欢
      • 1970-01-01
      • 2020-01-17
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 2014-04-04
      • 2017-09-06
      相关资源
      最近更新 更多