【问题标题】:Feature Toggles in SymfonySymfony 中的功能切换
【发布时间】:2014-11-17 03:15:45
【问题描述】:

我们的 Symfony 应用程序目前是一个应用程序,很快将需要能够让多个站点指向同一个 Symfony 核心,并且根据当前所在的站点具有稍微不同的功能。

例如,我们可能在一个站点上显示横幅,但在另一个站点上不显示。另一个示例是将在不同站点上启用/禁用的付款选项。或者另一个是不同站点上表单上的不同字段。

有没有人以这种方式构建 Symfony 应用程序的经验?

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    如果你想为你的应用程序“主题化”,你可以使用LiipThemeBundle,它真的很好用。对于功能激活/停用,您还可以使用 FeatureToggleBundle 捆绑包(最近很少使用)。

    你也可以像这样实现一个基本的助手:

    /**
     * Check if a feature is activated.
     *
     * @param string $feature Name of the feature
     *
     * @throws AccessDeniedHttpException
     */
    protected function checkFeature($feature)
    {
        $features = $this->container->getParameter('app.features')
        if (!$features[$feature]) {
            throw new AccessDeniedHttpException();
        }
    }
    
    ...
    
    $this->checkFeature('contact_form');
    

    使用这种配置:

    app.features:
        contact_form: false
    

    【讨论】:

      【解决方案2】:

      您必须知道使用内核事件侦听器可以完成大部分工作。

      例如,您可以在“CoreBundle”中使用kernel.request 事件将用户引至不同的模板,具体取决于用户所在的域名。

      因此,在您的情况下,网站很容易在一个网站上显示横幅,但在另一个网站上却不行。

      你可以看看这篇解释它的文章:

      Twig templating using event listener

      【讨论】:

        【解决方案3】:

        是的,这就是 symfony 的优势

        symfony 使用与路由和控制器连接的内核,然后正在创建响应。

        如果你想在 symfony 中使用多个应用程序,你可以很容易地做到这一点,这是 symfony 的一个优势。为此你只需要添加一些路由,一切都会自动完成。

        您可以使用 symfony 表单类添加表单并将它们附加到具有必填字段的其他页面,而无需再次创建整个表单。 如果您想添加或删除某些功能,您可以通过 app 类或创建不同的控制器来实现。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-09
          • 1970-01-01
          • 1970-01-01
          • 2017-11-12
          • 1970-01-01
          • 1970-01-01
          • 2021-01-08
          • 1970-01-01
          相关资源
          最近更新 更多