覆盖 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.php
中resource/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 5.7 - 覆盖请求验证类中的 all() 方法以验证路由参数?