Использование 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, если что-то не работает.