Следуя документу Dynamic Router, Я могу:
- Создать маршрут, связанный с моим контентом (объект Страница)
- Сохраняйте это с помощью ORM
- Загрузите мой контроллер, соответствующий маршруту
Но поскольку мой контроллер должен ожидать параметр $contentDocument, у меня ничего нет.
Вот как я создаю свой маршрут и свою сущность:
$page = new Page();
$page->setTitle('My Content')
->setBackground(1)
->setDescription('My description')
->setContent('<h1>Hello</h1>');
$manager->persist($page);
$manager->flush(); // flush to be able to use the generated id
$contentRepository = $this->container->get('cmf_routing.content_repository');
$route = new Route();
$route->setName('my-content');
$route->setStaticPrefix('/my-content');
$route->setDefault(RouteObjectInterface::CONTENT_ID, $contentRepository->getContentId($page));
$route->setContent($page);
$page->addRoute($route); // Create the backlink from content to route
$manager->persist($page);
$manager->flush();
Вот мой раздел конфигурации:
cmf_routing:
chain:
routers_by_id:
router.default: 200
cmf_routing.dynamic_router: 100
dynamic:
enabled: true
persistence:
orm:
enabled: true
generic_controller: AppBundle:Default:showPage
templates_by_class:
AppBundle\Entity\Page: AppBundle:Default:index.html.twig
Мой контроллер:
public function showPageAction($page)
{
return $this->render('default/index.html.twig');
}
И ошибка:
Контроллер «AppBundle\Controller\DefaultController::showPageAction()» требует, чтобы вы предоставили значение для аргумента «$page». Либо аргумент допускает значение NULL, и не было предоставлено нулевое значение, либо не было предоставлено значение по умолчанию, либо потому, что после этого аргумента есть необязательный аргумент.