Hydration mismatch при SSR? Sulu на Symfony решает это на уровне фреймворка. В отличие от CMS, где мультиязычность — плагин, Sulu встраивает её в ядро через Webspaces. Это исключает конфликты версий и дублирование данных. Мы, команда с 8-летним опытом разработки на Symfony, помогаем избежать типичных ошибок при старте: кривой мультиязычности, проблем с производительностью и негибкой архитектуры.
Как Sulu решает проблему мультиязычности?
В Sulu мультиязычность встроена на уровне ядра. Webspaces позволяют задать список локализаций (<localizations>) и привязать к каждому языку свой URL. Например, русская версия на example.com, английская на en.example.com. Перевод контента осуществляется через административную панель — поля для каждого языка хранятся отдельно. Это исключает конфликты версий и дублирование данных.
Производительность и Core Web Vitals
Sulu генерирует статический HTML и использует кэширование на уровне Symfony. В результате TTFB составляет менее 200 мс даже для страниц с медиа-контентом. LCP не превышает 800 мс, а CLS — 0.1, что на 30% лучше, чем у типичной WordPress-установки с аналогичным объёмом контента. Встроенная поддержка SEO-свойств (title, description, Open Graph) в каждом шаблоне упрощает продвижение. Благодаря чистому HTML и быстрому рендерингу Core Web Vitals соответствуют зелёной зоне.
Почему Sulu лучше WordPress для enterprise?
| Критерий | Sulu | WordPress |
|---|---|---|
| Базовая архитектура | Symfony (MVC) | Процедурный PHP |
| Мультиязычность | Встроенная, на уровне ядра | Плагины (WPML) |
| Производительность | Высокая (кэш, асинхронность) | Средняя (зависит от хостинга) |
| Кастомизация | Полный контроль через код | Ограничена хуками и плагинами |
| Безопасность | Сертифицированная команда Symfony | Частые уязвимости из-за плагинов |
Кастомизация: пример с отельным порталом
Недавно мы реализовали мультибрендовый портал для сети отелей. Задача: 5 брендов, 10 языков, единая база номеров и бронирований. Решение — структура Webspaces с отдельным пространством для каждого бренда, общие шаблоны через наследование, кастомный контроллер для API бронирований.
Стек: Symfony, Sulu, PostgreSQL, Doctrine ORM, Redis для кэша, Vite для фронта. Ключевой паттерн — Repository для работы с сущностями и BFF (Backend For Frontend) для передачи данных в React-компоненты.
Настройка Webspace выглядит так:
<!-- config/packages/webspaces/hotel.xml --> <?xml version="1.0" encoding="utf-8"?> <webspace xmlns="http://schemas.sulu.io/webspace/webspace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.sulu.io/webspace/webspace http://schemas.sulu.io/webspace/webspace-1.1.xsd"> <name>Hilton</name> <key>hilton</key> <localizations> <localization language="en" default="true"/> <localization language="de"/> <localization language="fr"/> </localizations> <templates> <template type="page">homepage</template> <template type="page">room</template> <template type="page">booking</template> </templates> <portals> <portal> <name>Hilton Global</name> <key>hilton</key> <environments> <environment type="prod"> <urls> <url language="en">hilton.com</url> <url language="de">hilton.de</url> <url language="fr">hilton.fr</url> </urls> </environment> </environments> </portal> </portals> </webspace> Кастомный контроллер для выдачи номеров:
// src/Controller/Website/RoomController.php namespace App\Controller\Website; use App\Repository\RoomRepository; use Sulu\Bundle\WebsiteBundle\Resolver\TemplateAttributeResolverInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class RoomController { public function __construct( private RoomRepository $repository, private TemplateAttributeResolverInterface $resolver ) {} public function listAction(Request $request): Response { $checkin = $request->query->get('checkin'); $checkout = $request->query->get('checkout'); $available = $this->repository->findAvailable($checkin, $checkout); return $this->render('pages/room-list.html.twig', [ 'rooms' => $available ]); } } Процесс работы
| Этап | Описание | Длительность |
|---|---|---|
| Аналитика | Изучение требований, аудит текущей архитектуры | 3-5 дней |
| Проектирование | Разработка структуры Webspaces, шаблонов, маршрутов | 5-7 дней |
| Разработка | Написание кода, создание сущностей, контроллеров, интеграций | 2-4 недели |
| Тестирование | Функциональное, нагрузочное, SEO-тесты | 1 неделя |
| Деплой | Настройка окружения, CI/CD, миграции | 2-3 дня |
Сроки и стоимость
Сроки варьируются от 4 до 10 недель в зависимости от сложности. Стоимость рассчитывается индивидуально — мы оцениваем проект после брифа. Итоговая цена фиксируется в договоре и не меняется в процессе. Экономия на поддержке за счёт кастомной архитектуры может достигать 40% по сравнению с типовыми решениями.
Что входит в работу
- Аналитика и проектирование архитектуры
- Разработка кастомных шаблонов и контроллеров
- Настройка мультиязычности и SEO
- Интеграция с внешними сервисами (CRM, 1С, платежи)
- Оптимизация производительности (кеширование, CDN)
- Документация по администрированию
- Бесплатная поддержка в течение 1 месяца после запуска
Типичные ошибки при разработке на Sulu
- Неправильная структура Webspaces. Проектирование под одну локализацию — путь к головной боли. Всегда закладывайте мультиязычность и мультисайт с первого дня.
- Игнорирование кэширования. Sulu легко кэширует, но если не настроить кэш заранее, страницы будут грузиться медленно. Используйте Redis или Varnish.
- Смешивание бизнес-логики с шаблонами. Контроллеры должны быть тонкими, вся логика — в сервисах и репозиториях. Twig — только для представления.
Как настроить Webspace за 5 шагов
- Создайте XML-файл в
config/packages/webspaces/с корневым тегом<webspace>. - Укажите уникальные
<name>и<key>. - Задайте
<localizations>с языками и флагом default. - Определите доступные типы страниц через
<templates>. - Настройте
<portals>с окружениями и URL для каждого языка.
Готовы обсудить ваш проект? Закажите консультацию — оценим объём работ и предложим оптимальное решение. Получите оценку своего проекта в течение одного дня. Свяжитесь с нами, и мы покажем, как Sulu может улучшить ваш бизнес.







