配置

编辑本页

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

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

配置

配置通常涉及不同的应用程序部分(如基础设施和安全凭据)和不同的环境(开发、生产)。这就是Symfony建欧宝娱乐app下载地址议将应用程序配置分成三部分的原因。

这些选项会从一台机器更改到另一台机器(例如,从开发机器更改到生产服务器),但不会改变应用程序的行为。

最佳实践

将与基础设施相关的配置选项定义为环境变量。在开发过程中,使用.env而且.env.local在项目的根文件中设置这些。

默认情况下,Symfon欧宝娱乐app下载地址y将这些类型的选项添加到.env在应用程序中安装新的依赖项时:

1 2 3 4 5 6 7 8 9 10
# .env###>教条/教条束###DATABASE_URL = sqlite: / / / % kernel.project_dir % / var /数据/ blog.sqlite###<教条/教条束###symfo欧宝娱乐app下载地址ny/swiftmail -bundle ###MAILER_URL = smtp: / / localhost ?加密= ssl&auth_mode = login&username =密码=###< 欧宝娱乐app下载地址symfony/swiftmail -bundle ####……

类中没有定义这些选项配置/ services.yaml文件,因为它们与应用程序的行为无关。换句话说,只要正确配置了数据库,应用程序就不关心数据库的位置或访问它的凭据。

若要使用特定于机器的或敏感的值覆盖这些变量,请创建.env.local文件。该文件不应添加到版本控制中。

谨慎

小心倾倒的内容$ _SERVER而且_ENV美元变量或输出phpinfo ()内容将显示环境变量的值,暴露敏感信息,如数据库凭据。

规范参数

最佳实践

中定义应用程序的所有环境变量.env文件。

欧宝娱乐app下载地址Symfony包含一个名为.env在项目根目录中,存储应用程序的环境变量的规范列表。该文件应该存储在版本控制中,因此应该只包含不敏感的默认值。

谨慎

2018年11月之前创建的应用程序的系统略有不同,涉及一个.env.dist文件。有关升级的信息,请参见:2018年11月更改为.env及如何更新

最佳实践

属性中定义与应用程序行为相关的配置选项配置/ services.yaml文件。

services.yaml文件包含应用程序用于修改其行为的选项,例如电子邮件通知的发件人或已启用的功能切换。在.env文件将添加一个不必要的额外配置层,因为您不需要或不希望在每个服务器上更改这些配置值。

属性中定义的配置选项services.yaml可能不同于一个环境到另一个地方。这就是Symfony支欧宝娱乐app下载地址持定义的原因配置/ services_dev.yaml而且配置/ services_prod.yaml文件,以便您可以覆盖每个环境的特定值。

常量vs配置选项

定义应用程序配置时最常见的错误之一是为永不更改的值创建新选项,例如分页结果的项数。

最佳实践

使用常量定义很少更改的配置选项。

定义配置选项的传统方法导致许多Symfony应用程序包含如下选项,用于控制在博客主页上显示的帖子数量:欧宝娱乐app下载地址

1 2 3
#配置/ services.yaml参数:homepage.number_of_items:10

如果你在过去做过类似的事情,实际上很可能你已经做到了从来没有实际上需要改变这个值。没有必要为永远不会配置的值创建配置选项。我们建议在应用程序中将这些值定义为常量。例如,你可以定义一个NUMBER_OF_ITEMS常量帖子实体:

1 2 3 4 5 6 7 8 9
/ / src /实体/ Post.php名称空间应用程序实体帖子常量NUMBER_OF_ITEMS =10/ /……

定义常量的主要优点是可以在应用程序中的任何地方使用它们的值。当使用参数时,它们只能从能够访问Symfony容器的地方使用。欧宝娱乐app下载地址

常量可以在你的Twig模板中使用,这要感谢常数()函数

1 2 3
<p>显示{{常数(' NUMBER_OF_ITEMS ', post)}}最近的结果。p>

Doctrine实体和存储库现在可以很容易地访问这些值,而它们不能访问容器参数:

12 3 4 5 6 7 8 9 10 11 12
名称空间应用程序存储库使用应用程序实体帖子使用学说ORMEntityRepositoryPostRepository扩展EntityRepository公共函数findLatest限制=:: NUMBER_OF_ITEMS)/ /……}}

对这类配置值使用常量的唯一显著缺点是,您不能在测试中轻松地重新定义它们。

参数命名

最佳实践

配置参数的名称应该尽可能短,并且应该包括整个应用程序的公共前缀。

使用应用程序。作为参数的前缀是一种常见的做法,以避免与Symfony和第三方bundle /库参数冲突。欧宝娱乐app下载地址然后,只用一两个词来描述参数的目的:

1 2 3 4 5 6 7 8 9 10
#配置/ services.yaml参数:'dir'太通用了,没有任何意义app.dir:'...'#这样做:简短但容易理解的名字app.contents_dir:'...'#可以使用点、下划线、破折号或什么都不用,但一定要用#保持一致,所有参数使用相同的格式app.dir.contents:'...'app.contents-dir:'...'

下一个:组织您的业务逻辑

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