Использование CMF DynamicRouter для сущностей Doctrine

У меня есть следующие две сущности Doctrine (ORM):

  • Товар
  • категория

Категория содержит один или несколько сегментов (уровней):

  • category
  • category/sub-category

Продукт содержит название и, возможно, цвет. Продукт либо имеет цвет, либо нет.

  • product
  • product/red

Я хотел бы иметь как страницы категорий, так и страницы продуктов.

URL категории должен быть составлен как {locale}/{category_path}например,

  • /en_US/category
  • /en_US/category/sub-category

URL продукта должен быть составлен как {locale}/{category_path}/{product_path}например,

  • /en_US/category/product
  • /en_US/category/product/red
  • /en_US/category/sub-category/product
  • /en_US/category/sub-category/product/red

Проблема с использованием маршрутизации Symfony заключается в том, что между следующими маршрутами может возникнуть путаница, поскольку они имеют одинаковое количество сегментов:

  • /en_US/category/sub-category
  • /en_US/category/product

Это то, для чего я могу использовать CMF DynamicRouter? Если да, то на высоком уровне, какие части мне нужно собрать? Нужно ли использовать RouteProvider для каждого субъекта?

1 ответ

Чтобы использовать динамический маршрутизатор "из коробки", ваши сущности должны иметь возможность реализовать RouteReferrersReadInterface. То есть им нужно возвращать объекты маршрута. И вам нужно будет реализовать RouteProviderInterface, чтобы вы могли найти документы в базе данных.

В Doctrine ORM вы, вероятно, захотите отдельные объекты маршрута (по одному на язык), которые содержат явный путь и ссылку на товары / категории. Afaik ORM может связывать только между известными объектами - один из способов использовать один и тот же объект маршрута - сделать категорию и продукт общим общим базовым классом, который является сопоставленным суперклассом. Варианты цвета продукта могут быть сделаны как переменная часть URL, поэтому вы получите шаблон с надписью.../{color}

С помощью средства улучшения маршрутов CMF вы можете настроить различные контроллеры для категорий и страниц продуктов.

Ограниченный пример маршрутов ORM предоставляется с RoutingBundle. Вы можете расширить базовую сущность или начать самостоятельно, начав с этого. В документации на symfony.com часто сначала упоминается, как работать со стандартным хранилищем CMF, Doctrine PHPCR-ODM, но все должно работать и с ORM. Открытые проблемы в проекте cmf github, если что-то не работает.

Другие вопросы по тегам