我正在尝试为我的管理面板添加文件上传的自定义验证逻辑。现在,如果文件没有上传或更改,我的文件字段可以返回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
向属性添加其他规则不起作用。添加的规则未由验证程序处理。
有没有办法验证这些规则没有手动重新验证整个事情?
答案 0 :(得分:0)
我看到的是你在规则中使用sometimes
。从我的角度来看,你需要把它拿出来,甚至更好,而不使用自定义类。
使用Validator对象:
$validator = Validator::make($data, [
'image' => 'required',
]);
$validator->sometimes('image', 'mimes:jpeg;png,dimensions:min_width=800', function($value) {
return $value instanceof UploadedFile;
});
如果您使用的是Request类,则可以覆盖函数getValidatorInstance
,以便应用条件规则:
protected function getValidatorInstance(){
$validator = parent::getValidatorInstance();
$validator->sometimes('image', 'mimes:jpeg;png,dimensions:min_width=800', function($value) {
return $value instanceof UploadedFile;
});
return $validator;
}