Symfony CMF动态路由器没有contentDocument

时间:2018-05-21 13:47:22

标签: symfony routing symfony-3.4 symfony-cmf

按照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');
}

错误:

  

Controller“AppBundle \ Controller \ DefaultController :: showPageAction()”要求您为“$ page”参数提供值。参数可以为空,并且没有提供空值,没有提供默认值,或者因为在此之后存在非可选参数。

1 个答案:

答案 0 :(得分:1)

动态路由将内容文档放入名为&#34; contentDocument&#34;的请求中。您需要明确使用该名称:

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

如果您不需要在控制器中执行任何操作,则无需指定generic_controller。 template_by_class将使包提供的控制器使用$ contentDocument中找到的页面实例呈现该模板。