Symfony CMF Динамический маршрутизатор без содержимогоDocument - PullRequest
0 голосов
/ 21 мая 2018

После документа Динамический маршрутизатор , я могу:

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

1 Ответ

0 голосов
/ 24 мая 2018

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

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

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

...