有什么方法可以验证有时是文件(图像)&&有时是字符串(同一图像的源)的字段

is there any way to validate a field that sometime is File(image) && sometime is String(Src of same image)

我的问题: 我正在使用 laravel 框架 php

我想验证一个字段我的字段有时是文件(图像),有时是字符串(同一图像的 src)

Laravel有什么捷径或解决办法吗???

您的问题的具体细节并不十分清楚,但我认为您可以通过执行以下操作来管理您想要的内容:

$request->validate([
   'stringOrFile' => [
        function ($attribute, $value, $fail) {
            if (!is_string($value) && !($value instanceof UploadedFile)) {
                $fail('The '.$attribute.' must either be a string or file.');
            }
        }
 
   ]

]);

其中 UploadedFile 指的是 \Illuminate\Http\UploadedFilestringOrFile 指的是您正在验证的输入的名称。

但是,如果可能的话,根据输入的内容使用不同的名称,这样您就可以对每个不同的输入使用更复杂的验证规则。

有关此类验证规则的更多详细信息in the manual

我使用这个代码示例。取任何对你有用的部分。

$msg=[
        'name.required'=>'<span class="badge">Name</span> is Required',
        'username.required'=>'<span class="badge">User Name</span> is Required',
        'born.required'=>'<span class="badge">User Name</span> is Required'
    ];


    $request->validate([
        'name'=>'required|string|min:2|max:30',
        'username'=>'required|string|min:3|max:20',
        'born'=>'required|date',
        'image'=>'nullable|image|mimes:jpg,jpeg,bmp,png'
    ],$msg);

$msg 错误

您应该创建错误页面 blade 名称 错误 包含

@if($errors->any())
{!! implode('', $errors->all('<div class="alert alert-danger">:message</div>')) !!}
@endif

///

在 blade 中包含用于验证的表单写入顶部代码

@include('error')

如果存在任何错误显示错误,请包含错误页面

实际上,在使用表单数据时,空图像作为字符串“null”接收。你可以在你的控制器中管理它。

$request->request->add(['image' => $request->image==  "null" ? null : $request->image]);
$request->validate(['image'=> nullable|sometimes|image|mimes:jpeg,png,jpg,svg])

或者您可以发送空字符串以防未附加图片。