【问题标题】:Architecture of CMS on Top Symfony CMF顶级 Symfony CMF 上的 CMS 架构
【发布时间】:2015-09-18 16:37:51
【问题描述】:

我在 Symfony CMF 组件/捆绑包之上构建了一个非常自定义的 CMS。我几乎阅读了有关 CMF 组件/捆绑包的所有内容,并且我已经定义了“架构”。我有经验/熟悉 Symfony2 组件。

CMS 应提供一种管理多个站点的方法。 站点包含页面。 一个页面,需要一个标题并且可能有内容。页面还可以关联块(块包已经提供的块,以及我为 CMS 开发的具有自定义功能的其他块)。

现在我定义了两个文档(站点和页面)。 根据应用需求,我使用 CoreBundle、BlockBundle、RoutingBundle、DoctrinePHPCRBundle 和 DoctrinePHPCRAdminBundle。

基于此要求,预期的存储库树应类似于:

/sites
    /site1 ( nodename of the Site Document )
         /pages ( all pages of this site )
              /page1 ( nodename of a Page Document )
              /page2
         /routes ( all routes of this site )
    /site2
        /pages
  ...

CoreBundle 的配置:

cmf_core:
        persistence:
            phpcr:
                basepath: /sites
                enabled: true

因为我需要每个站点的节点(/pages,/routes),我该如何初始化它们?我的第一个想法是初始化所需节点的站点文档的 onPostPersist 事件。

use PHPCR\Util\NodeHelper;

...

public function initSiteNodes(ManagerRegistry $registry, Site $site)
    {
        $session = $registry->getConnection();

        NodeHelper::createPath($session, $site->getId()./pages);
        NodeHelper::createPath($session, $site->getId()./routes);

        $session->save();
    }

所以我的问题是:

这种架构是否可行,SonataAdminBundle 是否为这种架构做好了准备?

【问题讨论】:

    标签: symfony-cmf


    【解决方案1】:

    很高兴听到您正在 CMF 之上构建自定义 CMS。这是它的主要预期用例之一。

    对于您的用例,需要注意的一件重要事情是 route base paths can be an array of paths.如果您知道将存在的站点,您可以简单地为所有站点配置基本路径。

    如果它们可以动态创建,您将需要做更多的工作。您可以检查表达式语言是否可以帮助您,或者编写一个很早出现的 symfony 请求侦听器,并在 cmf_routing.phpcr_candidates_prefix 服务上设置正确的基本路径。

    sonata phpcr-odm 管理员并未真正针对多站点用例进行优化。但是,在权限系统的帮助下,您应该能够控制谁可以看到什么。

    您也可以写信至symfony-cmf-users 邮件列表。有几个人使用 CMF 进行了多站点项目,并且可能有其他想法或输入。如果您发现可以改进的地方,请随时在相应的 CMF 存储库上打开拉取请求或问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    相关资源
    最近更新 更多