условное изображение валидатора - PullRequest
0 голосов
/ 13 января 2019

у меня есть обязательное поле и может быть 2 типа значения: строка (путь) и файл изображения

как можно написать правило проверки для этого?

если значение является строкой, проверьте file_exist и если это файл, то это должно быть изображение

спасибо

Ответы [ 2 ]

0 голосов
/ 13 января 2019

я нашел свой ответ с FormRequest

MyTestFormRequest

<?php
use Illuminate\Foundation\Http\FormRequest;
use Symfony\Component\HttpFoundation\File\UploadedFile;

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;
    }
}

FileExistsRule

<?php

use Illuminate\Contracts\Validation\Rule;

class FileExistsRule implements Rule
{
    public function passes($attribute, $value)
    {
        return file_exists(public_path($value));
    }

    public function message()
    {
        return 'The file not exists';
    }
}
0 голосов
/ 13 января 2019

Может быть, есть более простой способ сделать это. Тем не менее, я думаю, что пользовательское правило как таковое должно работать.

$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.'); 
                }
            }
        },
    ],
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...