Разработка

Laravel + Vue: когда стек оправдан, а когда нет

Никита Литвяков
Никита Литвяков
Senior PHP / Laravel Backend Developer
Laravel + Vue: когда стек оправдан, а когда нет

Сценарий первый. Команда взяла Next.js, потому что «фронтенд должен быть на Next, так делают все». Через полгода тонут в SSR-кэше, дублируют валидацию на бэке и фронте, переизобретают auth, а простой CRUD для админки занимает три дня. Сценарий второй. Взяли голый PHP-монолит на Blade, всё рендерится на сервере, и каждый чих в интерфейсе — это full page reload. Пользователи плюются, фронтендеры разбегаются.

И в том, и в другом случае проблема одинаковая: выбрали стек не под задачу, а по моде или инерции. А стек — это не идеология, это инструмент. Если у вас внутренняя CRM, B2B-кабинет или ERP — Next.js там, скорее всего, не нужен. Если у вас лендинг — Laravel + Vue там тоже не нужен.

Когда Laravel + Inertia + Vue — точное попадание

Этот стек выигрывает там, где много CRUD'а, монолитная авторизация и server-driven routing важнее SPA-архитектуры:

  • админ-панели и back-office;
  • B2B-кабинеты и личные кабинеты SaaS;
  • CRM, ERP, биллинги, ITSM;
  • внутренние корпоративные приложения;
  • MVP продуктовых стартапов с упором на скорость доставки фич.

Что вы получаете:

  • Один auth-слой. Сессии Laravel, middleware, gate'ы, policy — всё работает по-старому. Не надо городить JWT, refresh-токены, синхронизацию состояния авторизации между фронтом и бэком.
  • Один источник правды. Маршруты — на сервере. Контроллер возвращает страницу + данные одним пакетом через Inertia. Никаких отдельных REST-схем под каждый экран.
  • Vue 3 + TypeScript на фронте. Реактивные интерфейсы, компоненты, composition API, нормальный DX. Без потери в сложности интерфейсов.
  • Скорость разработки. Eloquent + Form Requests + Inertia + Vue — три файла, и у вас работающий экран с CRUD, валидацией и обработкой ошибок.
  • Деплой. Один артефакт, один сервер, один процесс. Никаких отдельных Vercel'ов, edge-runtime'ов и проблем «в проде окружение другое».

Минимальный пример того, насколько плоский получается контроллер:

public function index(Request $request)
{
    return Inertia::render('Orders/Index', [
        'orders' => Order::query()
            ->with('client')
            ->latest()
            ->paginate(20),
        'filters' => $request->only(['status', 'q']),
    ]);
}

На фронте — обычная Vue-страница с пропсами orders и filters. Никакого useEffect, никакого fetch, никакого SWR.

Когда не подходит

Будем честны.

  • Контентные сайты, блоги, лендинги, маркетинг. Берите Astro, Nuxt static, Next static export. SEO, статика, CDN — это их профиль.
  • Публичные SPA с десятками реалтайм-фич, где state живёт на клиенте часами (трейдинг, дизайн-редакторы, документ-коллабы). Тут оправдан полноценный SPA.
  • Мобильные приложения. Inertia — это про веб. Для мобилок — REST или GraphQL + нативный код, React Native или Flutter.

Если задача попадает в эти категории — Laravel + Vue + Inertia будет натягиванием совы на глобус. Лучше выбрать другой инструмент, чем потом героически бороться со своим выбором.

Выбор стека — это решение на годы, и переделывать его дороже, чем сразу подумать; могу помочь оценить вашу задачу и собрать архитектуру под неё, особенно если вы между «взять Next, потому что модно» и «остаться на голом Blade, потому что страшно».

Что обычно входит в работу

Помимо самого приложения, реальный продуктовый стек на Laravel + Vue почти всегда включает:

  • REST API для мобилок, партнёров, внешних интеграций (Sanctum / Passport, версии, OpenAPI-спека).
  • Telegram-боты — приём заявок, нотификации, бот-операторы для саппорта.
  • Интеграции с CRM/ERP (amoCRM, Bitrix24, 1С, RetailCRM) — двусторонняя синхронизация через webhook'и и очереди.
  • Платёжки — ЮKassa, CloudPayments, Stripe, Robokassa: страница оплаты, рекуррентные платежи, фискализация через Атол/Orange Data.
  • Очереди и фоновые задачи — Horizon, Supervisor, Redis. Без этого продукт упирается в HTTP-таймауты на любой тяжёлой операции.
  • Тесты — Pest на бэк, vue-test-utils на критичные компоненты. CI на каждом PR, не «когда-нибудь потом».

Это не «приятные дополнения», это базовая обвязка любого живого продукта.

Запомнить

  • Стек выбирают под задачу. «Модно» — не аргумент.
  • Laravel + Inertia + Vue — оптимально для админок, B2B, CRM/ERP, внутренних SaaS.
  • Для статики и маркетинга — статический генератор. Для тяжёлых SPA — отдельный фронт + API.
  • REST API, Telegram-боты, интеграции, очереди — это не «потом», это часть продукта с первого дня.

Если думаете о новом проекте, переписываете старый или просто хотите второе мнение по архитектуре — напишите. Делаю веб-приложения на PHP/Laravel + Vue 3 + Inertia: админки, B2B-кабинеты, CRM/ERP, REST API, Telegram-боты, интеграции с платёжками и внешними системами. От архитектуры и MVP до сопровождения в продакшене.

#PHP #Laravel #Vue
Поделиться:

Также может быть интересно