【发布时间】:2014-11-17 03:15:45
【问题描述】:
我们的 Symfony 应用程序目前是一个应用程序,很快将需要能够让多个站点指向同一个 Symfony 核心,并且根据当前所在的站点具有稍微不同的功能。
例如,我们可能在一个站点上显示横幅,但在另一个站点上不显示。另一个示例是将在不同站点上启用/禁用的付款选项。或者另一个是不同站点上表单上的不同字段。
有没有人以这种方式构建 Symfony 应用程序的经验?
【问题讨论】:
我们的 Symfony 应用程序目前是一个应用程序,很快将需要能够让多个站点指向同一个 Symfony 核心,并且根据当前所在的站点具有稍微不同的功能。
例如,我们可能在一个站点上显示横幅,但在另一个站点上不显示。另一个示例是将在不同站点上启用/禁用的付款选项。或者另一个是不同站点上表单上的不同字段。
有没有人以这种方式构建 Symfony 应用程序的经验?
【问题讨论】:
如果你想为你的应用程序“主题化”,你可以使用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
【讨论】:
您必须知道使用内核事件侦听器可以完成大部分工作。
例如,您可以在“CoreBundle”中使用kernel.request 事件将用户引至不同的模板,具体取决于用户所在的域名。
因此,在您的情况下,网站很容易在一个网站上显示横幅,但在另一个网站上却不行。
你可以看看这篇解释它的文章:
【讨论】:
是的,这就是 symfony 的优势
symfony 使用与路由和控制器连接的内核,然后正在创建响应。
如果你想在 symfony 中使用多个应用程序,你可以很容易地做到这一点,这是 symfony 的一个优势。为此你只需要添加一些路由,一切都会自动完成。
您可以使用 symfony 表单类添加表单并将它们附加到具有必填字段的其他页面,而无需再次创建整个表单。
如果您想添加或删除某些功能,您可以通过 app 类或创建不同的控制器来实现。
【讨论】: