【发布时间】:2017-10-22 03:22:44
【问题描述】:
我正在尝试为我的管理面板添加文件上传的自定义验证逻辑。现在我的文件字段可以返回Illuminate\Http\UploadedFile 或string|null 如果文件没有上传或更改或其他。我正在做的是,我创建了一个如下所示的自定义规则:
'image' => [
'required',
'admin_file:mimes:jpeg;png,dimensions:min_width=800;min_height=600'
]
然后我解析我传递的所有参数,问题是,我自然希望只有当我的值是UploadedFile 的实例时才应用所有参数。我使用以下代码进行自定义验证:
<?php
class AdminFileValidator
{
public function validate($attribute, $value, $parameters, Validator $validator)
{
$rules = implode(
"|",
array_map(function($item) {
return str_replace(";", ",", $item);
}, $parameters)
);
$validator->sometimes($attribute, $rules, function() use ($value) {
return $value instanceof UploadedFile;
});
return true;
}
}
问题在于通过sometimes 向属性添加附加规则不能这样工作。验证器未处理添加的规则。
有没有办法验证这些规则无需手动重新验证整个事情?
【问题讨论】:
-
老实说,您为什么要为此创建自定义验证器是没有意义的。 Laravel 自带
file规则来检查文件是否上传成功。还有一些规则可以使它成为可选的。 -
我需要验证许多不同类型的文件。像文档、图像、图像+pdf 等。并且 mime 规则只接受
UploadedFile实例,并且如果我正在传递字符串则失败(我无法合理地避免,因为所有内容都包含在FormRequest中) -
那么你想要一个字符串值被成功处理而不是抛出一个错误?据我所知,规则
file、mimetypes、mimes以及sometimes完全符合您的要求,除了字符串允许。我不确定您是如何在表单文件输入中获得字符串的。 -
@Sandeesh,我认为可以使用两种不同的形式。 1. 用户可以从 PC 中选择图像 2. 用户可以选择 url 或图像路径.. 两者都指向同一个请求
-
@manix 那么输入 url 并添加 required_unless 规则会不会更容易。
标签: php laravel validation laravel-5 laravel-5.4