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

时间:2018-08-16 21:44:15

标签: symfony symfony-3.4

因此,我已经建立了一个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在哪里确定这一点。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

通常,您将在.yml(或.php或.xml,取决于您的文件首选项选择)文件中设置环境变量,并针对特定部署将其保持不变。

然后,您将有多个正在生产或开发中的部署。

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

答案 1 :(得分:1)

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

您可以这样获得环境变量:

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

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

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

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

希望有帮助!