Я создаю простую CMS с Symfony 4. Где можно создавать страницы.При создании страницы вызывается Doctrine EvenSubscriber.Этот подписчик создает PageRoute .
<?php
#src/Doctrine/EvenListener
/**
* PageRouteSubscriber
*/
namespace App\Doctrine\EventListener;
use App\Controller\PageController;
use App\Entity\Page;
use App\Entity\Route;
use Doctrine\Common\EventSubscriber;
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
/**
* Class PageRouteSubscriber
* @package App\Doctrine\EventListener
*/
class PageRouteSubscriber implements EventSubscriber {
/**
* Returns an array of events this subscriber wants to listen to.
* @return array
*/
public function getSubscribedEvents() {
return [
'postPersist',
'postUpdate',
];
}
public function postPersist(LifecycleEventArgs $args){
$this->index($args);
}
public function postUpdate(LifecycleEventArgs $args){
$this->index($args);
}
public function index(LifecycleEventArgs $args)
{
$entity = $args->getObject();
if($entity instanceof Page){
$route = new Route();
$route->setController(PageController::class);
$route->setRouteContentId(get_class($entity) . '#' . $entity->getId());
$route->setLocale($entity->getLocale());
$route->setSlug($entity->getSlug());
$entityManager = $args->getObjectManager();
$entityManager->persist($route);
$entityManager->flush();
}
}
}
. Таким образом, при создании страницы также создается маршрут.См. Изображения для страницы базы данных и примеров маршрутов.
Страница ![Table page](https://i.stack.imgur.com/S4zQk.png)
Маршрут ![Table route](https://i.stack.imgur.com/FJfBi.png)
Я не знаю, что это лучший способ хранить маршруты и страницы в БД.Потому что у них обоих одинаковый слизень.Я думал, только установить слизняки в таблице маршрутов.И для каждой сущности, проверяющей уникальный слаг на основе всех слагов в таблице маршрутов (если это возможно?).
Для маршрутизации: я сейчас не знаю, как подбирать маршруты и использовать их с Symfony Route Collection.Также возможно кэшировать те маршруты так же, как это делает Symfony и создает в большом файле с именем: srcDevDebugProjectContainerUrlGenerator
Когда у меня есть работающие маршруты, я могу создать меню внешнего интерфейса.Где пункт меню страницы связан со страницей.Эта страница имеет маршрут.С помощью этого маршрута можно создать URL-адрес меню (это правильный способ мышления?).