Php 将自定义条件验证规则添加到同一属性
我正在尝试为我的管理面板的文件上传添加自定义验证逻辑。现在我的文件字段可以返回Php 将自定义条件验证规则添加到同一属性,php,laravel,validation,laravel-5,laravel-5.4,Php,Laravel,Validation,Laravel 5,Laravel 5.4,我正在尝试为我的管理面板的文件上传添加自定义验证逻辑。现在我的文件字段可以返回illighted\Http\UploadedFile或string | null,如果文件未上载或更改或其他情况。我正在做的是,我创建了一个自定义规则,如下所示: 'image' => [ 'required', 'admin_file:mimes:jpeg;png,dimensions:min_width=800;min_height=600' ] 然后我解析我传递的所有参数,问题是,我自然
illighted\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;
}
}
我看到的是,您有时在规则内部使用。从我的角度来看,你需要把它去掉,甚至不用自定义类就更好了
使用验证程序对象:
$validator = Validator::make($data, [
'image' => 'required',
]);
$validator->sometimes('image', 'mimes:jpeg;png,dimensions:min_width=800', function($value) {
return $value instanceof UploadedFile;
});
如果您使用的是请求类,则可以重写函数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;
}
老实说,您为什么要为此创建自定义验证器是毫无意义的。Laravel附带了文件
规则来检查文件是否已成功上传。还有一些规则使其成为可选的。有许多不同类型的文件需要验证。像文档、图像、图像+pdf等。mime规则只接受UploadedFile
实例,如果传递字符串(这是我无法合理避免的,因为所有内容都被包装到FormRequest
)则会失败,所以您希望成功处理字符串值,而不是抛出错误?据我所见,规则文件
,mimetypes
,mimes
以及有时
完全满足您的需要,除了字符串余量。我不确定您是如何在表单文件输入中获得字符串的。@Sandeesh,我假设有两种不同的表单可以使用。1.用户可以从PC 2中选择图像。用户可以在其中选择url或图像路径。。他们都指向同一个方向request@manix那么,有一个url输入并添加一个必需的规则不是更容易吗。