PHPackages                             projct1/laravel-validation-base64 - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. projct1/laravel-validation-base64

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

projct1/laravel-validation-base64
=================================

Missing laravel validation rules for base64 encoded strings and files.

v1.0.0(1mo ago)111MITPHPPHP ^8.4CI passing

Since Jul 6Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/projct1/laravel-validation-base64)[ Packagist](https://packagist.org/packages/projct1/laravel-validation-base64)[ RSS](/packages/projct1-laravel-validation-base64/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (4)Versions (2)Used By (0)

Laravel validation base64
=========================

[](#laravel-validation-base64)

Недостающие правила валидации Laravel для base64-строк и base64-файлов.

- `Base64Rule` — значение является каноничной base64-строкой: сырой либо завёрнутой в `data:;base64,`-URI.
- `FileBase64Rule` — декодированное содержимое проходит любые нативные ограничения [`Illuminate\Validation\Rules\File`](https://laravel.com/docs/validation#validating-files) (тип, размер, размеры изображения, ...).

Требования
----------

[](#требования)

- PHP ^8.4
- Laravel 12 или 13

Установка
---------

[](#установка)

```
composer require projct1/laravel-validation-base64
```

Сервис-провайдер (переводы сообщений) подключается автоматически через package discovery — регистрировать ничего не нужно.

Валидация base64-строки
-----------------------

[](#валидация-base64-строки)

```
use Projct1\LaravelValidationBase64\Rules\Base64Rule;

$request->validate([
    'signature' => ['required', new Base64Rule],
]);
```

Принимается как сырой base64 (`iVBORw0...`), так и data-URI (`data:image/png;base64,iVBORw0...`) — включая заголовки с дополнительными параметрами (`data:image/png;charset=utf-8;base64,...`) и в любом регистре.

Валидация base64-файла
----------------------

[](#валидация-base64-файла)

Первый аргумент конструктора — любой набор нативных файловых ограничений `Illuminate\Validation\Rules\File`. Второй (необязательный) — путь к соседнему полю, значение которого подставляется в сообщения как `:hint` (например, видимое пользователю имя файла); wildcards пути резолвятся из числовых сегментов провалившегося атрибута: `photos.2.src` + `photos.*.name` → `photos.2.name`.

```
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\File;
use Projct1\LaravelValidationBase64\Rules\FileBase64Rule;

$data = [
    'photos' => [
        [
            'name' => 'Фото зала',
            'src' => 'data:image/png;base64,iVBORw0...',
        ],
    ],
    'food' => [
        'tree' => [
            'items' => [
                [
                    'dish' => [
                        'id' => 1,
                        'name' => 'Стейк',
                    ],
                    'photo' => [
                        'src' => 'data:image/png;base64,iVBORw0...',
                    ],
                ],
            ],
        ],
    ],
];

// любые нативные файловые правила: https://laravel.com/docs/validation#validating-files
$fileRules = File::image()->dimensions(
    Rule::dimensions()->minWidth(1024)->minHeight(768)
);

$rules = [
    'photos.*.src' => new FileBase64Rule($fileRules, 'photos.*.name'),
    'food.tree.*.items.*.photo.src' => new FileBase64Rule($fileRules, 'food.tree.*.items.*.dish.name'),
];

$messages = [
    'dimensions' => ':Attribute имеет недостаточные размеры (:cur_width/:cur_height), необходимо не менее :min_width/:min_height пикселей',
];

$attributes = [
    'photos.*.src' => 'Фото галереи ":hint"',
    'food.tree.*.items.*.photo.src' => 'Фото блюда ":hint"',
];

$validator = validator($data, $rules, $messages, $attributes);
```

Кастомные `$messages` и `$attributes` наружного валидатора действуют и внутри файловых правил — как в нативной валидации.

Плейсхолдеры сообщений
----------------------

[](#плейсхолдеры-сообщений)

`FileBase64Rule` добавляет к заменам ядра свои плейсхолдеры:

- `:cur_width` / `:cur_height` — фактические размеры декодированного изображения. Подставляются только когда содержимое реально декодируется в изображение; для не-изображений сообщения с этими плейсхолдерами придерживаются — сырые `:cur_*` никогда не доходят до пользователя.
- `:hint` — значение соседнего поля по пути из второго аргумента конструктора. При отсутствии значения подставляется пустая строка.

Поведение
---------

[](#поведение)

- **Только канонический base64.** Проверка — строгий round-trip (`base64_encode(base64_decode($value)) === $value`): unpadded-варианты (`QQ` вместо `QQ==`) и url-safe-алфавит отклоняются.
- **`http(s)`-URL пропускают файловую валидацию.** Уже сохранённый файл приходит своим URL — декодировать нечего. Ссылкой считается только `http`/`https`; значения в любой другой схеме (`ftp`, `phar`, ...) идут через base64-валидацию и проваливаются.
- **Невалидный ввод не бросает исключений.** Не-строки (массивы, числа, null), битый base64 и кривые заголовки data-URI проваливают валидацию с base64-сообщением, а не роняют запрос `TypeError`'ом.
- **Пустая строка — валидный base64 нулевой длины.** Обязательность значения — зона ответственности `required`, не этого правила.

Переводы
--------

[](#переводы)

Сообщение о провале — `base64::validation.base64` (в комплекте `en` и `ru`). Переопределение:

```
php artisan vendor:publish --tag=base64-lang
```

после чего тексты правятся в `lang/vendor/base64/{locale}/validation.php`.

Разработка
----------

[](#разработка)

```
composer test   # phpunit (orchestra/testbench)
composer lint   # pint --test
composer fix    # pint
```

CI гоняет матрицу PHP 8.4/8.5 × Laravel 12/13 плюс отдельную pint-джобу.

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance91

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

43d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/9752959?v=4)[Maximos](/maintainers/projct1)[@projct1](https://github.com/projct1)

---

Top Contributors

[![projct1](https://avatars.githubusercontent.com/u/9752959?v=4)](https://github.com/projct1 "projct1 (7 commits)")

---

Tags

laravelvalidationbase64filesstringsimagesencoded

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/projct1-laravel-validation-base64/health.svg)

```
[![Health](https://phpackages.com/badges/projct1-laravel-validation-base64/health.svg)](https://phpackages.com/packages/projct1-laravel-validation-base64)
```

###  Alternatives

[crazybooot/base64-validation

Laravel validators for base64 encoded files

1352.1M8](/packages/crazybooot-base64-validation)[markwalet/nova-modal-response

A Laravel Nova asset for Modal responses on an action.

17930.8k](/packages/markwalet-nova-modal-response)[ronasit/laravel-helpers

Provided helpers function and some helper class.

2087.0k31](/packages/ronasit-laravel-helpers)[team-nifty-gmbh/tall-datatables

Server-side rendered datatables for Laravel and Livewire

1422.0k5](/packages/team-nifty-gmbh-tall-datatables)[crumbls/layup

A visual page builder plugin for Filament 5 — Divi-style grid layouts with extensible widgets.

604.0k2](/packages/crumbls-layup)[tomshaw/electricgrid

A feature-rich Livewire package designed for projects that require dynamic, interactive data tables.

119.8k](/packages/tomshaw-electricgrid)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
