来自共享symfony基本控制器的所有视图中的公共内容

时间:2017-07-07 18:44:06

标签: symfony content-management-system ezpublish ezplatform

我正在使用ezplatform并试图找出如何自动将常见的cms内容共享到所有页面,而无需为每个视图编写单独的控制器。

这是yml文件的简单摘录:

root_folder:
    controller: "AppBundle:Homepage:homepage"
    match:
        Id\Location: 58

article_container:
  controller: "AppBundle:ArticleContainer:articleContainerChildren"
  match:
      Identifier\ContentType: "article_container"

article_one_column:
    template: "full/article_one_column.html.twig"
    match:
        Identifier\ContentType: "article_one_column"

这是与自己的自定义控制器的三个简单匹配,但最后一个除外。

前两个匹配击中了一个扩展基本控制器的控制器。 在基本控制器中,我们有一个标准的渲染函数,如下所示:

return $this->render(
    'full/article_container.html.twig',
    [
        'location'         => $location,
        'content'          => $currentContent,
        'articles'         => $articles,
        'articleLocations' => $locations,
    ]
);

所述渲染功能如下所示:

$parameters = array_merge($parameters, [
    'main_navi'         => $navigation,
    'mega_navi_data'    => $navigation,
    'quotes'            => $contentRenderer->getQuotesData(),
    'featured_articles' => $contentRenderer->getFeaturedArticles(),
    'contact_form'      => $this->getContactForm(),
]);

return parent::render($view, $parameters, $response);

正如您所看到的,我们只是简单地将原始参数与所有页面所需的一些常见数据合并。这些数据用于" maga navi"和页脚内容。

问题是,当我们尝试加载article_one_column页面时, 因为这不使用自定义控制器,所以它不会加载公共数据 页眉和页脚需要导致树枝错误。

问题: 如何在不为每种数据类型编写自定义控制器的情况下为所有路径提供公共内容?

1 个答案:

答案 0 :(得分:2)

您不必为每种内容类型创建控制器。如果可能的话,你想要的是将数据注入到视图中。

使用自定义控制器是其中一个选项,对于要注入的通用内容,您也可以使用https://doc.ez.no/display/DEVELOPER/Injecting+parameters+in+content+views

我们将这个概念(其中包括https://github.com/Novactive/NovaeZExtraBundle)与ChildrenProvider概念捆绑在一起。

另外,您提到要在视图中注入与页眉和页脚相关的信息,以便在布局中获取它们。听起来很奇怪。使用eZ但也可以使用Symfony,您可以从视图中渲染控制器,您可以渲染标题并独立于视图渲染页脚。 (这可能是你应该做的)

对于孩子们,我喜欢使用监听器而不是自定义控制器。 它是在Novactive捆绑中管理但是如果你自己做的话要小心,pre_content_view监听器将在每个视图上触发(行,完整等等)。通常,你只想在视图中注入东西。< / p>