如何在 Symfony 3.4 中设置基于域的配置?

Posted

技术标签:

【中文标题】如何在 Symfony 3.4 中设置基于域的配置?【英文标题】:How do I set domain based configuration in Symfony 3.4? 【发布时间】:2019-01-26 22:08:01 【问题描述】:

所以我设置了一个 Symfony 3.4 应用程序,我使用 Symfony 安装程序按照此处的说明下载了该应用程序:

https://symfony.com/download

我正在为我的雇主构建这个应用程序,以便在多个电子商务网站中运行。它不仅必须使用预装在 /app/config/ 目录中的 prod、test 和 dev 配置,而且还需要为每个站点设置一组站点唯一配置(主要是几个 twig 全局变量等)它继续运行。

我的问题是检测我的应用在哪个站点上运行并将其传递到配置方面的最佳方法是什么?

我正在研究开发、测试和产品如何在 web/app.php 和 web/app_dev.php 中工作,并想知道是否有某种方法可以基于站点域类似地扩展该概念。

不确定这是否重要,但我正在使用框架下载附带的默认 Yaml 配置文件,并希望通过 XML 或 PHP 选项坚持使用它。

感谢您的帮助。

【问题讨论】:

为每个客户拥有多个 Symfony 应用实例不是更明智吗? 因此,该应用程序将有一个存储库,但我将在 3 个所需的电子商务站点中的每个站点上安装一个实例。这是你指的还是别的什么? 离题但你真的应该使用Symfony Flex 来创建你的项目。 Symfony 安装程序已经消失。 flex 目录结构有点不同,并且与 Symfony 4 前向兼容。 所以我正在将一些体面的代码转换成我们的一个站点上的代码,该站点主要基于 Symfony / Doctrine 包,如 Symfony 框架,但具有自定义引导。我选择 Symfony 3.4 是为了简化代码转换过程,因为那是代码已经存在的地方。我计划在未来的项目中更新到 Symfony 4。但就目前而言,这是我必须完成的工作。我会牢记 Symfony Flex。 【参考方案1】:

根据您的服务器配置,您有多种选择来执行此操作。我所做的是在我的虚拟主机中定义一个环境变量SYMFONY__ENV,如下所示:SetEnv SYMFONY__ENV dev

然后你可以修改你的web/app.php来读取这个变量。

$env = strtolower(getenv('SYMFONY__ENV'));
$kernel = new AppKernel($env, $env === 'dev' || $env === 'test');

正如评论者所说,您应该尽可能更新到 Symfony Flex,但您可以使用此配置,直到更新为止。

【讨论】:

听起来不错。唯一的问题是我已经有了开发、测试和产品设置。我将需要运行此应用程序的多个实例(现在我想到了 4 个),这意味着我需要 dev_site1、test_site1 和 prod_site1,然后是 dev_site2、test_site2 和 prod_site2 等等,这 4 个站点中的每一个都给了我一些东西像 12 个相当冗余的设置文件。我想做的是为 dev、prod 和 test 设置设置,然后将它们与 site1、site2、site3 和 site4 的不同设置结合使用。我会寻找 2 组独特的设置,而不是 1 组。

以上是关于如何在 Symfony 3.4 中设置基于域的配置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Doctrine (Symfony 3) 实体中设置列位置

上传图片时如何在 symfony2 奏鸣曲媒体中设置最大上传大小

在 symfony2 sonata 管理包中设置默认值

如何使用swiftmailer-bundle在symfony 4中设置多个邮件

Symfony 验证 - 在自定义验证行为中设置属性路径

在 dev 和 prod 环境中设置 Backbone.js 从 Symfony2 获取