Как в реквесте отвалидировать картинки base 64 Laravel?

Всем привет подскажите пожалуйста как в реквесте отвалидировать картинки base 64 Laravel?

введите сюда описание изображения

вот реквест

public function rules(CategoryRepository $categoryRepository): array
{
    dd($this->request->all());
    $categoryIds = $this->request->get('categories');
    $enteredAttributes = $this->request->get('attributes');
    if ($categoryIds) {
        $this->session()->flash('selectedCategoryId', $categoryIds);
    }

    if ($enteredAttributes) {
        $this->session()->flash('enteredAttributes', $enteredAttributes);
    }

    $items = [];

    if ($categoryIds) {
        $category = $categoryRepository->getSelectedCategory($categoryIds);

        foreach ($category->allAttributes() as $attribute) {
            $rules = [
                $attribute->required ? 'required' : 'nullable',
            ];

            if ($attribute->isInteger()) {
                $rules[] = 'integer';
            } elseif ($attribute->isFloat()) {
                $rules[] = 'numeric';
            } else {
                $rules[] = 'string';
                $rules[] = 'max:255';
            }
            if ($attribute->isSelect()) {
                $rules[] = Rule::in($attribute->variants);
            }

            $items['attributes.' . $attribute->id] = $rules;
        }
    }

    return array_merge([
        'categories' => 'required|array',
        'title' => 'required|string',
        'price' => 'required|string',
        'content' => 'required|string',
        'regionId' => 'required|string',
        'street' => 'string',
    ], $items);
}

Ответы (1 шт):

Автор решения: InDevX

На днях делал в Lumen через кастомные правила.

use Illuminate\Support\Facades\Validator;

private static function addCustomValidationRule(string $name, array $mime_types):void {
    Validator::extend($name, function($attribute, $value, $params, $validator) use ($mime_types) {
        $f = finfo_open();
        $result = finfo_buffer($f, base64_decode($value), FILEINFO_MIME_TYPE);
        return in_array($result, $mime_types);
    });
}

self::addCustomValidationRule('is_image', ['image/bmp', 'image/gif', 'image/jpeg', 'image/png']);

$validation = Validator::make(['image' => $base64img ], [
    'image' => 'is_image'
]);

if ( $validation->fails() ) {
    return response()->json(['error' => true, 'error_text' => $validation->fails()], 409);
}
→ Ссылка