IO7 Framework vs Laravel 13 — Сравнение
Внимание
Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!
Цель документа — показать, что есть в IO7 и чего не хватает по сравнению с Laravel 13 (март 2026, PHP 8.3–8.5). IO7 — это не форк Laravel, а самостоятельно выросший фреймворк, который использует Laravel как библиотеку (illuminate/database для Eloquent и Query Builder). Сравнение идёт по подсистемам.
1. HTTP-слой (роутинг, контроллеры, middleware)
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Роутинг (GET/POST/PUT/DELETE) | Route::get(), группы, параметры, named routes | IO\Route, add_route(), group support | ✅ Есть |
| Route Model Binding | Автоматическая инъекция модели по {model} | Нет | ❌ Нет |
| Resource Controllers | Route::resource() / Route::apiResource() — 7-8 методов CRUD | Нет (роуты создаются вручную) | ❌ Нет |
| Form Requests | Классы валидации FormRequest с rules() и authorize() | Нет (валидация через CrudApi) | ❌ Нет |
| API Resources (JsonResource) | Трансформация моделей в JSON с вложенными关联 | Нет (CrudApi возвращает массивы) | ❌ Нет |
| JSON:API Resources | Сертифицированные JSON:API ответы (L13) | Нет | ❌ Нет |
| Dependency Injection в контроллерах | Полный DI через Container | Частичный (через IO\App) | ⚠️ Частично |
| Middleware (alias, groups) | Полноценная система с alias, groups, terminable | IO\Middleware interface + ручная регистрация | ⚠️ Базово |
| Rate Limiting | RateLimiter + throttle middleware | Нет (есть ThrottleMiddleware, но без RateLimiter) | ⚠️ Частично |
| HTTP Kernel | Оркестрация middleware stacks | App::do_render() — свой подход | ✅ Свой подход |
Чего не хватает
- Route Model Binding — автоматическая инъекция Eloquent моделей по параметрам URL
- Resource Controllers — генерация CRUD-маршрутов одной командой
- Form Requests — отдельные классы для валидации и авторизации входных данных
- API Resources — единообразная трансформация моделей в JSON (включая relationships, meta, links)
- JSON:API — соблюдение спецификации JSON:API
- Terminable middleware — middleware, выполняемая после отправки ответа
- Middleware Groups — централизованная регистрация групп middleware
2. Eloquent ORM и база данных
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Eloquent Models | Полноценные модели с $fillable, $casts, Accessors, Mutators | IO\SqlClass extends Model | ✅ Есть |
| Query Builder | Fluently Query Builder | Через Capsule + свой applyFilterToQuery() | ✅ Есть |
| Migrations | Классы миграций Schema::create/modify | IO\Database\Migration + TableBuilder | ✅ Есть |
| Seeders | Class-based seeders + фабрики | IO\Database\Seeder + Factory | ✅ Есть |
| Model Factories | HasFactory + состояния + последовательности | IO\Database\Factory (базовый) | ⚠️ Частично |
| Модели | hasOne, hasMany, belongsTo, belongsToMany, morphTo, morphMany | Нет (нет relationships) | ❌ Нет |
| Eloquent Scopes | Глобальные и локальные scopes | Нет | ❌ Нет |
| Eloquent Observers | Классы-слушатели жизненного цикла моделей | IO\Event (событийная система, но не привязана к моделям) | ⚠️ Частично |
| Eloquent Events | creating, created, updating, updated, и т.д. | Нет нативных | ❌ Нет |
| Soft Deletes | SoftDeletes trait + forceDelete | isDeleted поле вручную | ⚠️ Ручная реализация |
$hidden, $appended | Скрытие/добавление полей при сериализации | Нет | ❌ Нет |
| Сравнение (upsert, insertOrIgnore) | upsert(), insertOrIgnore() | insert_or_update(), insert_or_ignore() в SqlConnection | ✅ Есть |
| Транзакции | DB::transaction(fn() => ...) | beginTransaction(), commit(), rollback() | ✅ Есть |
| Read/Write раздельные подключения | DB::connection('read') / DB::connection('write') | ConnectionManager::readWriteConfig() | ⚠️ Частично |
| Поддержка SQLite | Первоклассная | Нет | ❌ Нет |
| Foreign Keys | $table->foreignId('user_id')->constrained()->cascadeOnDelete() | TableBuilder не поддерживает | ❌ Нет |
| Eager Loading | Model::with('relation') для предотвращения N+1 | Нет | ❌ Нет |
| Cursor Pagination | cursorPaginate() | Нет (только offset) | ❌ Нет |
| Semantic / Vector Search | whereVectorSimilarTo() (L13) | Нет | ❌ Нет |
Чего не хватает
- Eloquent Relationships — самое главное. Нет
hasOne,hasMany,belongsTo,belongsToMany,morphTo - Eager Loading —
with()для оптимизации N+1 запросов - Eloquent Scopes — глобальные и локальные области видимости запросов
- Eloquent Events — хуки жизненного цикла моделей (creating, updated, deleted)
- Soft Deletes нативные — вместо ручного
isDeleted - Model Factories с состояниями и последовательностями
- Cursor Pagination — пагинация без OFFSET для больших таблиц
- Foreign Key Constraints через TableBuilder
- SQLite — нет поддержки
3. Аутентификация и авторизация
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Session-based Auth | Auth::attempt(), guards, providers | IO\Session, JWT-токены | ✅ Свой подход |
| JWT | Через Passport/Sanctum | IO\Auth\TokenManager + IO\Legacy\JWTToken | ✅ Есть |
| OAuth2 Server | league/oauth2-server через Passport | IO\Auth\OAuth2Server | ✅ Есть |
| OAuth2 Client | Через Socialite | IO\Auth\OAuth2Client | ✅ Есть |
| Social Auth (Google, GitHub...) | Socialite (10+ провайдеров) | IO\Auth\SocialiteManager | ✅ Есть |
| Keycloak | Через адаптеры Socialite | IO\Auth\KeycloakManager | ✅ Есть |
| CrossDomainSSO | Нет в ядре | IO\Auth\CrossDomainSSO | ✅ IO7 уникальность |
| Sanctum | SPA cookie auth + personal tokens | Нет | ❌ Нет |
| Passport | Полный OAuth2 сервер | Частичная реализация | ⚠️ Базово |
| Password Rules | Password::min(8)->letters()->uncompromised() | Нет | ❌ Нет |
| Email Verification | MustVerifyEmail + middleware | Нет | ❌ Нет |
| Multi-Auth (guards) | Auth::guard('admin') | Нет (одна сессия) | ❌ Нет |
| Gates & Policies | Классы авторизации для моделей | IO\Core::checkRules() — через rules() | ⚠️ Другой подход |
| Fortify / Jetstream | Готовые решения для auth UI | Нет | ❌ Нет |
| Password Confirmation | Middleware для повторного ввода пароля | Нет | ❌ Нет |
Чего не хватает
- Sanctum — SPA cookie auth + personal access tokens
- Multi-Auth — несколько guard'ов для разных ролей
- Password Rules — проверка на утечки (Have I Been Pwned)
- Email Verification — нативная верификация email
- Gates & Policies — декларативная авторизация моделей
- Password Confirmation middleware
Уникальность IO7
- CrossDomainSSO — кросс-доменная SSO авторизация (нет в Laravel)
- TokenManager — поддержка HS256 + RS256 одновременно
- KeycloakManager — нативная интеграция с Keycloak
4. Шаблонизатор
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Шаблонизатор | Blade ({{ }}, {!! !!}, @extends, @section) | Twig ({{ }}, {% extends %}) | ✅ Другой подход |
| Template Inheritance | @extends, @section, @yield | {% extends %}, {% block %} | ✅ Twig |
| Components | <x-alert> компоненты | Twig Functions + FormBuilder | ⚠️ Другой подход |
| Кеширование шаблонов | Автоматическое | TWIG_CACHE_PATH | ✅ Есть |
| Кастомные функции | @php, Blade directives | Twig functions + TwigFunctions | ✅ Есть |
Чего не хватает
- Blade Components —
<x-component>с slotaми и атрибутами (у IO7 другой подход через Twig) - @error Directive — нативная вставка ошибок валидации
5. CLI (Artisan / iocli)
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| CLI фреймворк | Artisan | iocli | ✅ Есть |
| make:command | make:controller, make:model, make:migration | make:class, make:api, make:route, make:middleware, make:command | ✅ Есть |
| migrate / seed | php artisan migrate, db:seed | php iocli migrate, db:seed | ✅ Есть |
| schedule:run | php artisan schedule:run (daemon) | php iocli schedule:run | ✅ Есть |
| queue:work | php artisan queue:work | php iocli queue:work | ✅ Есть |
| tinker | Интерактивная PHP консоль | Нет | ❌ Нет |
| make:controller | Генерация контроллера | Нет | ❌ Нет |
| make:model | Генерация модели с миграцией, фабрикой, сидером | make:class | ⚠️ Базово |
| make:policy | Генерация policy | Нет | ❌ Нет |
| make:notification | Генерация notification | Нет | ❌ Нет |
| make:mail | Генерация mailable | Нет | ❌ Нет |
| make:job | Генерация queued job | Нет | ❌ Нет |
Чего не хватает
- Tinker — REPL консоль для отладки
- make:controller, make:model (полный scaffolding)
- make:policy, make:notification, make:mail, make:job
6. Очереди
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Очереди | sync, database, redis, sqs, beanstalkd | RabbitMQ | ⚠️ Частично |
| Job Classes | ShouldQueue + dispatch() | Нет (только через RabbitMQ) | ❌ Нет |
| Job Chains | Bus::chain([...]) | Нет | ❌ Нет |
| Job Batches | Bus::batch([...]) | Нет | ❌ Нет |
| Failed Jobs | Таблица failed_jobs + retry | Нет | ❌ Нет |
| Queue Routing | Queue::route() (L13) | Нет | ❌ Нет |
| #[Tries], #[Backoff] Attributes | PHP Attributes для джобов (L13) | Нет | ❌ Нет |
| Rate Limited Jobs | Redis::throttle() | Нет | ❌ Нет |
| Horizon | Dashboard для очередей | Нет | ❌ Нет |
Чего не хватает
- Job Classes с
ShouldQueue,dispatch(), middleware - Job Chains и Batches
- Failed Jobs таблица и retry机制
- Horizon — мониторинг очередей
- Queue Routing (L13) — маршрутизация джобов
7. Кеширование
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Cache Drivers | file, database, memcached, redis, array, dynamodb | docker_memcached, redis | ✅ Есть |
| Cache Tags | Cache::tags(['posts'])->put() | Нет | ❌ Нет |
| Cache Locks | Cache::lock('key', 30)->block(10, fn() => ...) | Нет | ❌ Нет |
| Cache::touch | Продление TTL (L13) | Нет | ❌ Нет |
| remember() | Cache::remember('key', $ttl, fn() => ...) | Нет | ❌ Нет |
| serializable_classes | Защита от десериализации (L13) | Нет | ❌ Нет |
Чего не хватает
- Cache Tags — тегированная инвалидация
- Cache Locks — распределенные блокировки
- remember() — шаблон cache-or-compute
- Cache::touch (L13)
8. Сессии
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Session Drivers | file, cookie, database, redis, array | cookie, redis | ✅ Есть |
| Flash Data | Session::flash() | Нет | ❌ Нет |
| Session Encryption | Шифрование сессий | Нет | ❌ Нет |
9. Логирование и события
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Event System | Event::dispatch(), Listeners, Subscribers | IO\Event::addHandler() | ✅ Есть |
| Event Discovery | Авто-обнаружение событий и слушателей | Нет | ❌ Нет |
| Queued Listeners | Слушатели в очереди | Нет | ❌ Нет |
| Broadcast Events | WebSocket push | Нет | ❌ Нет |
| Broadcasting | Pusher, Reverb, Ably, Socket.io | Нет | ❌ Нет |
| Log Channels | Множественные каналы (single, daily, stack, slack) | IO\Event — echo/file/error_log/syslog | ⚠️ Базово |
| Monolog | Поддержка Monolog | Нет | ❌ Нет |
| Reverb | Self-hosted WebSocket сервер | Нет | ❌ Нет |
Чего не хватает
- Event Discovery — автообнаружение
- Queued Listeners — асинхронная обработка
- Broadcasting / Reverb — реалтайм через WebSocket
- Log Channels — множественные каналы с ротацией
10. Тестирование
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| PHPUnit | phpunit ^12.0 | phpunit ^11.0 | ✅ Есть |
| HTTP Tests | $this->get('/api/users')->assertOk() | Нет | ❌ Нет |
| Database Testing | RefreshDatabase, assertDatabaseHas() | Базовые TestCase | ⚠️ Базово |
| Mail Testing | Mail::fake(), assertSent() | Нет | ❌ Нет |
| Notification Testing | Notification::fake() | Нет | ❌ Нет |
| Queue Testing | Queue::fake(), assertPushed() | Нет | ❌ Нет |
| Event Testing | Event::fake(), assertDispatched() | Нет | ❌ Нет |
| Storage Testing | Storage::fake() | Нет | ❌ Нет |
| Pest | Альтернативный test runner | Нет | ❌ Нет |
| Dusk | Browser тесты (ChromeDriver) | Нет | ❌ Нет |
Чего не хватает
- HTTP Tests — тестирование маршрутов
- RefreshDatabase — автоматическая очистка БД
- Fake'и —
Mail::fake(),Queue::fake(),Event::fake()и т.д. - Dusk — E2E тестирование в браузере
11. Уведомления
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Notifications | Mail, Database, Broadcast, SMS, Slack | Нет (только mail через Telegram не интегрирован) | ❌ Нет |
| Mailables | Классы писем с вложениями, Markdown | Нет | ❌ Нет |
| Mail Drivers | smtp, mailgun, postmark, ses, log | Нет | ❌ Нет |
12. Хранилище файлов
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Filesystem | Storage::disk('s3')->put() | IO\Storage\MinioManager | ⚠️ Только MinIO |
| Disk Drivers | local, s3, ftp, sftp, oss | MinIO (S3-совместимый) | ⚠️ Частично |
| Temporary URLs | Storage::temporaryUrl() | Нет | ❌ Нет |
| Upload Handling | $request->file('avatar')->store() | Нет (ручная обработка) | ❌ Нет |
13. Валидация
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Validator | Validator::make(), 50+ правил | IO\Form\FormBuilder — базовая | ⚠️ Базово |
| Rule Objects | Rule::unique(), Rule::exists() | Нет | ❌ Нет |
| Custom Messages | Кастомные сообщения ошибок | Нет | ❌ Нет |
| Nested Validation | 'items.*.name' => 'required' | Нет | ❌ Нет |
| After Validation | $request->validated() | Нет | ❌ Нет |
14. Безопасность
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| CSRF Protection | VerifyCsrfToken → PreventRequestForgery (L13) | IO\Middlewares\CsrfMiddleware | ✅ Есть |
| XSS Prevention | {{ }} auto-escape | Twig {{ }} auto-escape | ✅ Есть |
| SQL Injection | Query Builder parameterized queries | Query Builder + parameterized | ✅ Есть |
| Encryption | encrypt() / decrypt() AES-256 | Нет | ❌ Нет |
| Password Hashing | Hash::make() bcrypt/argon2 | password_hash() в User | ⚠️ Базово |
| Signed URLs | URL::signedRoute() | Нет | ❌ Нет |
| Rate Limiting | Throttling middleware | ThrottleMiddleware (базовый) | ⚠️ Базово |
| Security Headers | Middleware для CSP, HSTS | SecurityHeadersMiddleware | ✅ Есть |
| Request Forgery (L13) | Origin-aware CSRF | Нет | ❌ Нет |
| Pwned Password Check | Password::uncompromised() | Нет | ❌ Нет |
15. Производительность
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Octane | Swoole/RoadRunner — persistent app instances | Нет | ❌ Нет |
| Route Caching | route:cache | Нет | ❌ Нет |
| Config Caching | config:cache | Нет | ❌ Нет |
| Vite | Современный build tool с HMR | Нет (npm) | ❌ Нет |
| Pint | Code style fixer | Нет | ❌ Нет |
| Eager Loading | with() для предотвращения N+1 | Нет | ❌ Нет |
16. AI и новые фичи Laravel 13
| Возможность | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Laravel AI SDK | Текст, агенты, изображения, аудио, embeddings | Нет | ❌ Нет |
| Semantic Search | whereVectorSimilarTo() с pgvector | Нет | ❌ Нет |
| JSON:API Resources | Сертифицированные JSON:API ответы | Нет | ❌ Нет |
| Queue Routing | Queue::route() (L13) | Нет | ❌ Нет |
| PHP Attributes | #[Middleware], #[Authorize], #[Tries] (L13) | Нет (используются PHPDoc) | ❌ Нет |
17. Экосистема
| Пакет | Laravel 13 | IO7 | Статус |
|---|---|---|---|
| Sanctum | SPA + token auth | Нет | ❌ Нет |
| Passport | Полный OAuth2 | Базовый | ⚠️ Частично |
| Horizon | Dashboard очередей | Нет | ❌ Нет |
| Telescope | Debug dashboard | Нет | ❌ Нет |
| Nova | Admin panel builder | Нет | ❌ Нет |
| Pulse | Performance dashboard | PinbaManager (профилирование) | ⚠️ Другой подход |
| Octane | High-perf server | Нет | ❌ Нет |
| Forge | Server management | Нет | ❌ Нет |
| Vapor | Serverless deployment | Нет | ❌ Нет |
| Sail | Docker dev environment | Нет | ❌ Нет |
| Cashier Stripe | Биллинг | Нет | ❌ Нет |
| Pennant | Feature flags | Нет | ❌ Нет |
| Reverb | WebSocket server | Нет | ❌ Нет |
| Echo | Frontend WebSocket | Нет | ❌ Нет |
Итоговая сводка
Что есть в IO7 и нет в Laravel 13
| Функция IO7 | Описание |
|---|---|
| CrossDomainSSO | Кросс-доменная SSO авторизация (VKPlay-like) |
| KeycloakManager | Нативная интеграция с Keycloak (egov/aitu) |
| TokenManager (HS256+RS256) | Поддержка HMAC и RSA JWT одновременно |
| IO\Core::call() | Интерпроектный RPC (IO v6 ↔ IO v7 совместимость) |
| IO\Core::checkRules() | Авторизация через rules() на классах |
| FormBuilder | Декларативное построение форм (30+ типов полей) |
| ProxySQL | Балансировка нагрузки между MySQL/PostgreSQL |
| MinioManager | S3-совместимое хранилище (MinIO) |
| PinbaManager | Профилирование через polyfill-pinba |
| CronTemplate | Базовый класс для cron-задач |
| GateRoute / ApiRoute | Упрощённая маршрутизация API |
| Micro-frontend support | Встроенная поддержка МФ архитектуры |
| PGSQL + MySQL | Единый класс SqlConnection для обоих движков |
| Тонкий фреймворк | ~50 классов vs Laravel ~1000+ классов |
| Нет node_modules | Серверная часть без Node.js зависимостей |
Что есть в Laravel 13 и нет в IO7 (критичное)
| Функция | Важность | Описание |
|---|---|---|
| Eloquent Relationships | 🔴 Критично | hasOne, hasMany, belongsTo, belongsToMany, morphTo |
| Eager Loading | 🔴 Критично | with() для предотвращения N+1 |
| Eloquent Events | 🔴 Критично | Хуки creating, updated, deleted |
| HTTP Tests | 🔴 Критично | Тестирование маршрутов с assertions |
| Cache Tags / Locks | 🟡 Важно | Тегированная инвалидация и блокировки |
| Queue Job Classes | 🟡 Важно | ShouldQueue, chains, batches, failed jobs |
| Broadcasting | 🟡 Важно | WebSocket реалтайм (Reverb, Pusher) |
| Notifications | 🟡 Важно | Mail, Database, SMS, Slack уведомления |
| Mailables | 🟡 Важно | Классы писем с шаблонами |
| Sanctum | 🟡 Важно | SPA cookie auth + personal tokens |
| Multi-Auth (Guards) | 🟡 Важно | Несколько механизмов авторизации |
| Password Rules | 🟠 Желательно | Проверка на утечки паролей |
| Form Requests | 🟠 Желательно | Отдельные классы валидации |
| API Resources | 🟠 Желательно | Трансформация моделей в JSON |
| Rate Limiting | 🟠 Желательно | RateLimiter facade |
| Soft Deletes | 🟠 Желательно | Нативный trait |
| Octane | ⚪ Опционально | Высокопроизводительный сервер |
| AI SDK | ⚪ Опционально | Генерация текста, изображений, embeddings |
| Semantic Search | ⚪ Опционально | Векторный поиск через pgvector |
Рекомендации по развитию IO7
Приоритет 1 (Критичное)
- Eloquent Relationships — реализовать
hasOne,hasMany,belongsTo,belongsToManyна базе Illuminate - Eager Loading — добавить
with()в SqlClass - Eloquent Events — подключить Events boot
Приоритет 2 (Важное)
- Cache Tags / Locks — расширить Cache
- Queue Job Classes — создать базовый ShouldQueue интерфейс
- HTTP Tests — добавить тестирование маршрутов
- Soft Deletes — нативный trait вместо ручного isDeleted
Приоритет 3 (Желательное)
- Notifications — базовая система уведомлений
- Mailables — классы для email
- API Resources — трансформация моделей