PrestaShop — это мощная CMS для создания интернет-магазинов, которая претерпела множество изменений с момента своего запуска. Один из важных аспектов этой эволюции — маршрутизация и диспетчеризация, обеспечивающие работу с HTTP-запросами и возвращающие корректные ответы от контроллеров. В данной статье мы рассмотрим, как PrestaShop управляла маршрутизацией на старом движке и как это изменилось с переходом на Symfony. Мы исследуем принципы работы и различия в подходах, а также обсудим, как разработчики могут использовать новые возможности в своих проектах.
Основные понятия
В контексте PrestaShop маршрутизация и диспетчеризация выполняют ключевую роль в обработке HTTP-запросов:
- Маршрутизация (Routing) — процесс сопоставления HTTP-запроса с контроллером.
- Диспетчеризация (Dispatching) — выполнение найденного контроллера для генерации ответа.
Оба эти процесса необходимы для корректной работы как интерфейса покупателя (Front Office), так и административной панели (Back Office). До перехода на Symfony PrestaShop использовала собственную систему диспетчеров, но теперь активнее применяются современные механизмы Symfony.
Маршрутизация и диспетчер в старом подходе
Рассмотрим, как PrestaShop обрабатывала запросы до интеграции Symfony.
Front Office
Для пользовательского интерфейса (Front Office) запросы обрабатывались следующим образом:
- Запросы попадали в
index.php
— основной файл маршрутизации, который полагался на диспетчер PrestaShop. - Диспетчер находил нужный контроллер из директории
controllers/front
. - Контроллер вызывал нужный шаблон Smarty и заполнял его данными из PHP-объектов, создавая HTML-ответ.
Пример: При посещении главной страницы магазина запрос перенаправляется на IndexController
, который подготавливает ответ, используя шаблон и бизнес-логику.
Back Office
Для административного интерфейса (Back Office) старая маршрутизация также использовала диспетчер:
- Запросы попадали в файл
index.php
в/admin-{xxx}/
, который проверял наличие Symfony-маршрута. Если подходящего маршрута не находилось, запрос обрабатывался диспетчером. - Диспетчер находил нужный контроллер из
controllers/admin
. - Контроллер использовал систему Smarty-шаблонов для построения HTML-страниц, отображающих нужные данные и интерфейс.
Пример: При посещении страницы настроек доставки (AdminCarriersController
) контроллер выбирал соответствующий шаблон и заполнял его данными о доставке.
Переход на Symfony и новый подход к маршрутизации
С переходом на Symfony PrestaShop получила гибкие возможности и более структурированный подход к маршрутизации.
Front Office
Пока часть Front Office всё еще работает на старом движке, постепенно внедряется Symfony, особенно для модульной работы. Symfony предоставляет:
- Структурированные маршруты, с помощью которых можно задать подробные правила обработки запросов.
- Полное разделение логики между контроллерами и шаблонами Twig, которые заменили Smarty.
Back Office
Основные изменения затронули административную панель:
- Запросы попадают в
index.php
в/admin-{xxx}/
, который теперь запускает ядро Symfony. - Symfony находит нужный контроллер в
src/PrestaShopBundle/Controller/Admin
. - Контроллер вызывает Twig-шаблон, заполняя его объектами PHP, а затем генерирует HTML-ответ.
Пример: При посещении /admin-{xxx}/index.php/configure/shop/preferences/preferences?_token={yyy}
Symfony находит PreferencesController
, использует Twig-шаблон preferences.html.twig
и возвращает готовый ответ.
Сравнение старого и нового подходов
Аспект | Старый подход | Новый подход |
---|---|---|
Технология шаблонов | Smarty | Twig |
Маршрутизация | Диспетчер PrestaShop | Symfony Router |
Разделение логики | Ограниченное | Четкое разделение благодаря Symfony-контроллерам |
Гибкость настройки | Ограниченная | Высокая, благодаря маршрутам и сервисам Symfony |
Управление данными | Контроллеры используют классы PrestaShop | Контроллеры работают с сервисами Symfony |
Примеры использования
Пример маршрута в старом подходе
Пример маршрута в Symfony
В новом подходе конфигурация маршрутов может выглядеть так:
Эволюция маршрутизации и диспетчеров в PrestaShop открыла новые возможности для разработчиков и повысила удобство работы с кодом. Переход от устаревшего диспетчера на Symfony Router обеспечивает более гибкую, безопасную и масштабируемую систему для обработки запросов. Symfony способствует лучшему структурированию кода, а также облегчает работу над крупными проектами.
Поделитесь своим опытом работы с PrestaShop. Какие проблемы вы сталкивались в старом подходе и насколько новый подход оправдал ваши ожидания?