>我有一个必填字段,可以是 2 个值类型:字符串(路径)和图像文件
如何为此编写验证规则?
如果值为字符串,请检查file_exist,如果是文件必须是图像
谢谢
也许有一种更简单的方法可以做到这一点。但是,我认为这样的自定义规则应该有效。
$validator = Validator::make($request->all(), [
'image' => [
'required',
function ($attribute, $value, $fail) {
if(is_file($value)) {
if (true !== mb_strpos($value->getMimeType(), "image")) {
return $fail($attribute.' is invalid.');
}
}
if (is_string($value)) {
if(! file_exists($value)) {
return $fail($attribute.' is invalid.');
}
}
},
],
]);
我找到了答案FormRequest
我的测试表单请求
<?php
use IlluminateFoundationHttpFormRequest;
use SymfonyComponentHttpFoundationFileUploadedFile;
class MyTestFormRequest extends FormRequest
{
public function rules()
{
$rules = [
"image" => ['required']
];
if(is_string($this->image)) {
$rules['image'][] = new FileExistsRule;
} else if($this->image instanceof UploadedFile) {
$rules['image'][] = 'image';
$rules['image'][] = 'dimensions:ratio=1/1';
}
return $rules;
}
}
文件存在规则
<?php
use IlluminateContractsValidationRule;
class FileExistsRule implements Rule
{
public function passes($attribute, $value)
{
return file_exists(public_path($value));
}
public function message()
{
return 'The file not exists';
}
}