覆盖laravel验证消息

时间:2017-08-22 17:16:11

标签: php laravel validation

我正在构建一个上传多个文件的表单,它工作正常,但问题是我的验证消息,我的验证是检查文件的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() !!}

我的formRequest验证

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

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

             }                                             


return rules;     

4 个答案:

答案 0 :(得分:3)

您好,如果您正在使用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;
}

答案 1 :(得分:2)

使用自定义验证消息

validation.php文件夹

中的resource/lang/en/中的自定义数组中添加此行
'custom' => [
  .........
  'file.*' => [
    'mimes' => 'The filename must be a file of type: :values.',
  ],

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

冲突

答案 2 :(得分:0)

我为你的答案适合所有人,我找到了另一种适合我项目的方法。我创建了名为 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 =&gt;上传文件名

:values =&gt;'jpg,png,doc,docx'

答案 3 :(得分:0)

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

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;

}