如何掌握和创造新环境

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.1,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

如何掌握和创造新环境

每个应用程序都是代码和一组配置的组合,这些配置规定了代码应该如何运行。配置可以定义正在使用的数据库,是否应该缓存某些内容,或者应该如何详细记录日志。

在Sy欧宝娱乐app下载地址mfony中,“环境”的思想是指相同的代码库可以使用多种不同的配置运行。例如,dev环境应该使用使开发容易和友好的配置,而刺激环境应该使用一组针对速度优化的配置。

不同的环境,不同的配置文件

典型的Symfony欧宝娱乐app下载地址应用程序从三个环境开始:dev刺激,测验.如前所述,每个环境只是表示一种使用不同配置执行相同代码库的方法。因此,每个环境加载自己的单独配置文件就不足为奇了。如果您使用YAML配置格式,则使用以下文件:

  • dev环境:应用程序/配置/ config_dev.yml
  • 刺激环境:应用程序/配置/ config_prod.yml
  • 测验环境:应用程序/配置/ config_test.yml

类中默认使用的简单标准AppKernel类:

12 3 4 5 6 7 8 9 10 11 12 13
/ / app / AppKernel.php/ /……AppKernel扩展内核/ /……公共函数registerContainerConfiguration(LoaderInterface加载程序加载程序->负载(->getRootDir()。“/ config / config_”->getEnvironment()。“.yml”);}}

如您所见,在加载Symfony时,它使用给欧宝娱乐app下载地址定的环境来确定加载哪个配置文件。这以一种优雅、强大和透明的方式实现了多个环境的目标。

当然,在现实中,每个环境只是与其他环境略有不同。通常,所有环境都将共享大量公共配置。打开config_dev.yml配置文件,你可以看到这是如何轻松和透明地完成:

  • YAML
  • XML
  • PHP
1 2 3 4
进口:-资源:config.yml#……

要共享公共配置,每个环境的配置文件只需首先从中央配置文件(config.yml).然后,文件的其余部分可以通过覆盖个别参数而偏离默认配置。例如,默认情况下web_profiler工具栏被禁用。然而,在dev的值来激活工具栏工具栏选项中的config_dev.yml配置文件:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7
# app / config / config_dev.yml进口:-资源:config.ymlweb_profiler:工具栏:真正的#……

在不同的环境中执行应用程序

要在每个环境中执行应用程序,请使用其中之一加载应用程序app.php(对于刺激环境)或app_dev.php(对于dev环境)前端控制器:

1 2
http://localhost/app.php -> *prod*环境http://localhost/app_dev.php -> *dev*环境

如果你没有要么文件名,那么这是由你的网络服务器来决定哪一个文件在幕后执行。如果您使用内置的PHP web服务器,它知道使用app_dev.php文件。在生产中,您将配置web服务器使用app.php.无论哪种方式:总是执行这两个文件中的一个

请注意

给出的url假设您的web服务器配置为使用web /应用程序的目录作为其根目录。阅读更多安装Symfony欧宝娱乐app下载地址

如果你打开其中一个文件,你很快就会看到每个文件使用的环境都被显式地设置了:

1 2 3 4 5 6
/ /网络/ app.php/ /……内核AppKernel (“刺激”);/ /……

刺激属性指定此应用程序将在刺激环境。通过欧宝娱乐app下载地址使用此代码并更改环境字符串,可以在任何环境中执行Symfony应用程序。

请注意

测验环境是在编写功能测试时使用的,不能通过前端控制器直接在浏览器中访问。换句话说,与其他环境不同,这里没有app_test.php前端控制器文件。

重要,但与主题无关环境参数的第二个参数AppKernel构造函数。这指定应用程序是否应该在“调试模式”下运行。无论环境如何,Symfony应用程序都可以在调试模式设置为的情况下欧宝娱乐app下载地址运行真正的.这会影响应用程序中的许多事情,比如在错误页面上显示堆栈跟踪,或者缓存文件是否在每个请求上动态重建。虽然不是必需的,但调试模式通常设置为真正的dev而且测验环境和刺激环境。

在内部,调试模式的值变为kernel.debug参数。服务容器.如果你查看应用程序配置文件,你会看到使用的参数,例如,在使用Doctrine DBAL时打开或关闭日志:

  • YAML
  • XML
  • PHP
1 2 3 4
原则:dbal:日志:“% kernel.debug %”#……

选择控制台命令的环境

默认情况下,Symfon欧宝娱乐app下载地址y命令执行在dev环境,并启用调试模式。使用- - - env而且——没有调试修改此行为的选项:

1 2 3 4 5 6 7 8
# 'dev'环境和调试启用PHP bin/console命令名# 'prod'环境('prod'总是禁用调试)PHP bin/console command_name——env=prod . PHP bin/console command_name# 'test'环境和调试禁用PHP bin/console command_name——env=测验——没有调试

除了- - - env而且——调试选项,Symfony命令的行为也可以用环境变量来控欧宝娱乐app下载地址制。Symf欧宝娱乐app下载地址ony控制台应用程序在执行任何命令之前检查这些环境变量的存在和值:

欧宝娱乐app下载地址SYMFONY_ENV
将命令的执行环境设置为此变量的值(dev刺激测验等);
欧宝娱乐app下载地址SYMFONY_DEBUG
如果0,关闭调试模式。否则,开启调试模式。

这些环境变量对于生产服务器非常有用,因为它们允许您确保命令始终在刺激环境,而无需添加任何命令选项。

创建新环境

默认情况下,Symfony应欧宝娱乐app下载地址用程序有三个处理大多数情况的环境。当然,由于环境只不过是一个对应于一组配置的字符串,因此创建一个新环境非常容易。

例如,假设在部署之前,需要对应用程序进行基准测试。对应用程序进行基准测试的一种方法是使用接近生产环境的设置,但是使用Symfony的设置欧宝娱乐app下载地址web_profiler启用。这允许Symfony在基欧宝娱乐app下载地址准测试时记录有关应用程序的信息。

实现这一目标的最好方法是通过一个新的环境,例如,基准.首先创建一个新的配置文件:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6
# app / config / config_benchmark.yml进口:-资源:config_prod.yml框架:分析器:only_exceptions:

请注意

由于解析参数的方式,您不能使用它们动态地在导入中构建路径。这意味着以下内容是行不通的:

  • YAML
  • XML
  • PHP
1 2 3
# app / config / config.yml进口:-资源:' % kernel.root_dir % / parameters.yml '

通过这个简单的添加,应用程序现在支持名为基准

该新配置文件从刺激环境并修改它。这保证了新环境与刺激环境,除了这里显式做的任何更改。

因为您希望这个环境可以通过浏览器访问,所以还应该为它创建一个前端控制器。复制web / app.php文件web / app_benchmark.php并将环境编辑为基准

1 2 3 4 5 6 7
/ /网络/ app_benchmark.php/ /……//更改这一行内核AppKernel (“基准”);/ /……

新环境现在可以通过以下途径访问:

1
http:/ / localhost / app_benchmark.php

请注意

有些环境,比如dev环境,永远不会被公众在任何已部署服务器上访问。这是因为出于调试目的,某些环境可能会提供太多关于应用程序或底层基础设施的信息。为了确保这些环境无法访问,前端控制器通常通过控制器顶部的以下代码来保护外部IP地址:

1 2 3
如果(!in_array (@_SERVER“REMOTE_ADDR”),数组“127.0.0.1”“::1”))) {“您不允许访问此文件。检查”.basename (__FILE__).以获取更多信息。”);}

环境和缓存目录

欧宝娱乐app下载地址Symfony在许多方面利用了缓存:应用程序配置、路由配置、Twig模板等都被缓存到存储在文件系统文件中的PHP对象中。

默认情况下,这些缓存文件主要存储在var /缓存目录中。但是,每个环境都会缓存自己的一组文件:

1 2 3 4 5 6
Your-project /├─var/│├─cache/││├─dev/ # cache directory for *dev* environment││├─…

有时,在调试时,检查缓存文件以了解某些东西是如何工作的可能是有帮助的。这样做时,请记住查看您正在使用的环境的目录(最常见的是dev在开发和调试时)。虽然它可以变化,但var / dev /缓存目录包括以下内容:

appDevDebugProjectContainer.php
缓存的“服务容器”,表示缓存的应用程序配置。
appDevUrlGenerator.php
由路由配置生成并在生成url时使用的PHP类。
appDevUrlMatcher.php
用于路由匹配的PHP类——请查看这里的编译正则表达式逻辑,该逻辑用于将传入url匹配到不同的路由。
树枝/
这个目录包含所有缓存的Twig模板。

请注意

您可以轻松地更改目录位置和名称。欲了解更多信息,请阅读文章如何覆盖Symfony的默认目录欧宝娱乐app下载地址结构

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。