Навигация keyboard_arrow_down

Блог Rss rss_feed

Эволюция маршрутизации и диспетчеров в PrestaShop: переход от устаревшей к современной архитектуре

Эволюция маршрутизации и диспетчеров в PrestaShop: переход от устаревшей к современной архитектуре

PrestaShop — это мощная CMS для создания интернет-магазинов, которая претерпела множество изменений с момента своего запуска. Один из важных аспектов этой эволюции — маршрутизация и диспетчеризация, обеспечивающие работу с HTTP-запросами и возвращающие корректные ответы от контроллеров. В данной статье мы рассмотрим, как PrestaShop управляла маршрутизацией на старом движке и как это изменилось с переходом на Symfony. Мы исследуем принципы работы и различия в подходах, а также обсудим, как разработчики могут использовать новые возможности в своих проектах.

Основные понятия

В контексте PrestaShop маршрутизация и диспетчеризация выполняют ключевую роль в обработке HTTP-запросов:

  • Маршрутизация (Routing) — процесс сопоставления HTTP-запроса с контроллером.
  • Диспетчеризация (Dispatching) — выполнение найденного контроллера для генерации ответа.

Оба эти процесса необходимы для корректной работы как интерфейса покупателя (Front Office), так и административной панели (Back Office). До перехода на Symfony PrestaShop использовала собственную систему диспетчеров, но теперь активнее применяются современные механизмы Symfony.

Маршрутизация и диспетчер в старом подходе

Рассмотрим, как PrestaShop обрабатывала запросы до интеграции Symfony.

Front Office

Для пользовательского интерфейса (Front Office) запросы обрабатывались следующим образом:

  1. Запросы попадали в index.php — основной файл маршрутизации, который полагался на диспетчер PrestaShop.
  2. Диспетчер находил нужный контроллер из директории controllers/front.
  3. Контроллер вызывал нужный шаблон Smarty и заполнял его данными из PHP-объектов, создавая HTML-ответ.

Пример: При посещении главной страницы магазина запрос перенаправляется на IndexController, который подготавливает ответ, используя шаблон и бизнес-логику.

Back Office

Для административного интерфейса (Back Office) старая маршрутизация также использовала диспетчер:

  1. Запросы попадали в файл index.php в /admin-{xxx}/, который проверял наличие Symfony-маршрута. Если подходящего маршрута не находилось, запрос обрабатывался диспетчером.
  2. Диспетчер находил нужный контроллер из controllers/admin.
  3. Контроллер использовал систему Smarty-шаблонов для построения HTML-страниц, отображающих нужные данные и интерфейс.

Пример: При посещении страницы настроек доставки (AdminCarriersController) контроллер выбирал соответствующий шаблон и заполнял его данными о доставке.

Переход на Symfony и новый подход к маршрутизации

С переходом на Symfony PrestaShop получила гибкие возможности и более структурированный подход к маршрутизации.

Front Office

Пока часть Front Office всё еще работает на старом движке, постепенно внедряется Symfony, особенно для модульной работы. Symfony предоставляет:

  • Структурированные маршруты, с помощью которых можно задать подробные правила обработки запросов.
  • Полное разделение логики между контроллерами и шаблонами Twig, которые заменили Smarty.

Back Office

Основные изменения затронули административную панель:

  1. Запросы попадают в index.php в /admin-{xxx}/, который теперь запускает ядро Symfony.
  2. Symfony находит нужный контроллер в src/PrestaShopBundle/Controller/Admin.
  3. Контроллер вызывает 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

Примеры использования

Пример маршрута в старом подходе

// Вызов контроллера в Front Office (устаревший подход) $dispatcher = Dispatcher::getInstance(); $controller = $dispatcher->dispatch(); $controller->run();

Пример маршрута в Symfony

В новом подходе конфигурация маршрутов может выглядеть так:

# Конфигурация маршрута в Symfony (новый подход) admin_preferences: path: /admin-{xxx}/configure/shop/preferences controller: PrestaShopBundle\Controller\Admin\Configure\ShopParameters\PreferencesController::indexAction

Эволюция маршрутизации и диспетчеров в PrestaShop открыла новые возможности для разработчиков и повысила удобство работы с кодом. Переход от устаревшего диспетчера на Symfony Router обеспечивает более гибкую, безопасную и масштабируемую систему для обработки запросов. Symfony способствует лучшему структурированию кода, а также облегчает работу над крупными проектами.

Поделитесь своим опытом работы с PrestaShop. Какие проблемы вы сталкивались в старом подходе и насколько новый подход оправдал ваши ожидания?

Был ли этот пост полезен для вас?

    
На данный момент комментариев нет
close

Checkout

close

Избранное