控制 Symfony 3.4 框架进入生产或开发模式的正确方法是什么?

What is the right way to control a Symfony 3.4 Framework to go into production or development mode?

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

https://symfony.com/download

我已经编写了大量代码,运行在我的笔记本电脑上将其本地化。

我对这个应用程序的意图是将它与我​​雇主在同一台服务器上的其他旧项目一起 运行。这些较旧的项目必须在远程开发服务器上开发,这意味着我的 Symfony 应用程序的开发版本也必须位于远程开发服务器上。

当我在本地机器上访问我的项目时,Symfony 会自动通过 /web/app_dev.php 进行引导。但是当我把它放在远程开发服务器上时,它会自动使用 /web/app.php 引导,就像我在生产中一样。

我在这两个文件中都看到 symfony 声明了内核并选择了开发模式与生产模式,我想我可以编写逻辑来以不同的方式工作:

// line 24 in /web/app_dev.php
$kernel = new AppKernel('dev', true);

// line 10 in /web/app.php
$kernel = new AppKernel('prod', false);

但似乎正确的做法是让流量转到开发服务器上的 /web/app_dev.php,而不是打乱逻辑。我仍然计划使用 /web/app.php 进行生产,它将在另一台服务器上。

我的开发服务器进入开发模式的正确方法是什么?我看不出 symfony 是在哪里决定的。

感谢您的帮助。

通常您会在 .yml(或 .php 或 .xml 文件中设置您的环境变量,具体取决于您的文件首选项选择)并将其固定用于特定部署。

那么您有多个部署在生产或开发中。

另一种方法是让环境由用于访问的 url 确定,您看到的是本地访问自动确定开发模式,而 "remote" 访问确定生产模式自动地。但在大多数情况下,固定每个部署更有意义。

对此您有多种选择。您的决定取决于个人喜好和您的要求。在我的例子中,我修改了 app.php 文件以读取环境变量,然后设置适当的环境。我在应用程序的虚拟主机中设置了环境变量。

你可以这样获取环境变量:

$env = strtolower(getenv('SYMFONY__ENV'));

然后你可以像这样创建内核:

$kernel = new AppKernel($env, $env === 'dev');

顺便说一下,路由流量到 app_dev.php 在远程服务器上默认情况下不起作用,因为有一个条件检查以确保流量来自本地主机。因此,如果您决定走那条路,您将需要修改 app_dev.php 文件以删除该检查,否则您将收到 403 禁止错误。我最近遇到了同样的问题。

希望对您有所帮助!