Динамический маршрутизатор Symfony CMF no contentDocument

Следуя документу 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, и не было предоставлено нулевое значение, либо не было предоставлено значение по умолчанию, либо потому, что после этого аргумента есть необязательный аргумент.


person loicb    schedule 21.05.2018    source источник


Ответы (1)


Динамическая маршрутизация помещает документ содержимого в запрос с именем «contentDocument». Вам нужно явно использовать это имя:

public function showPageAction($contentDocument)
{
    return $this->render('default/index.html.twig');
}

если вам не нужно ничего делать в вашем контроллере, вам не нужно указывать generic_controller. template_by_class заставит предоставленный пакетом контроллер отображать этот шаблон с экземпляром страницы, найденным в $contentDocument.

person dbu    schedule 24.05.2018