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 до сопровождения в продакшене.
Также может быть интересно
AI написал код — кто повезёт его в продакшен?
Cursor и Claude отлично пишут MVP. А потом он должен поехать на сервер: SSL, база, бэкапы, мониторинг. Разбираем путь от «работает на ноуте» до продакшена.
Читать далее →