覆盖 laravel 验证消息

Posted

技术标签:

【中文标题】覆盖 laravel 验证消息【英文标题】:Override laravel validation message 【发布时间】: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 【参考方案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 进行验证,那么您可以使用此请求类

以上是关于覆盖 laravel 验证消息的主要内容,如果未能解决你的问题,请参考以下文章

扩展/覆盖 Laravel 验证器类

如何覆盖验证规则登录 Laravel\Fortify?

Laravel 5.7 - 覆盖请求验证类中的 all() 方法以验证路由参数?

使用身份验证护照系统覆盖 laravel 中 apis url 的身份验证重定向

Laravel 验证自定义消息

表单请求验证中的 Laravel“独特”自定义消息验证