第五章——配置Symfonyob娱乐下载
简单易用,symfony定义了几个约定,应满足最常见的需求标ob娱乐下载准应用程序不需要修改。然而,使用一组简单的和强大的配置文件,可以自定义几乎所有的框架和应用程序相互作用。有了这些文件,你也可以为您的应用程序添加特定的参数。
本章解释了如何配置系统的工作原理:
- symfob娱乐下载ony的配置保存在文件写在YAML,虽然你总是可以选择另一种格式。
- 配置文件是在项目、应用程序和模块的水平在一个项目的目录结构。
- 您可以定义多个集配置设置;在syob娱乐下载mfony中,一组的配置被称为一个环境。
- 在配置文件中定义的值可以从PHP应用程序的代码。
- 此外,symfony授权PHob娱乐下载P代码在YAML文件和其他技巧使系统更加灵活的配置。
配置系统
无论目的,大多数web应用程序共享一个共同的特点。例如,一些部分可以限制用户的一个子集,可以装饰或页面布局,或一种形式可以充满了用户输入验证失败后。框架定义了一个结构模仿这些特征,和开发人员可以进一步调整他们通过改变配置设置。这种策略可以节省大量开发时间,因为很多改变不需要一行代码,即使有很多代码后面。它也更有效,因为它确保这些信息可以保持在一个很容易识别的位置。
然而,这种方法有两个严重的缺点:
- 开发人员最终编写不断复杂的XML文件。
- 在一个PHP架构中,每个请求需要更长的时间来处理。
考虑到这些缺点,symfony使用配置文件只对自己最擅长做什么。ob娱乐下载事实上,野心symfony的配置系统是:ob娱乐下载
- 强大:几乎每一个方面,它可以使用配置文件管理管理使用配置文件。
- 简单:许多方面的配置没有显示在一个正常的应用程序中,因为他们很少需要更改。
- 容易:配置文件很容易阅读,修改,由开发人员创建。
- 可定制:YAML缺省配置语言,但它可以INI, XML,或者其他格式开发人员更喜欢。
- 快速:配置文件没有处理的应用程序,但配置系统,编译成一个快速处理的PHP服务器的代码。
YAML语法和Symfony约定ob娱乐下载
为其配置,symfony使用YAML格式默认情ob娱乐下载况下,而不是传统的INI或XML格式。YAML显示结构通过缩进和快写。它的优点和基本规则已经在第1章中描述。不过,您需要记住几个约定在编写YAML文件。本节介绍几个最著名的约定。为一个完整的论文主题,参观YAML网站(http://www.yaml.org/)。
首先,不要使用YAML文件标签;使用空格。YAML解析器不能理解文件选项卡,所以缩进你的行空间(双空白是symfony公约缩进),如清单5 - 1所示。ob娱乐下载
清单5 - 1 - YAML文件禁止标签
#不要使用标签:- >邮件:- > - >网站管理员:webmaster@example.com #用空格代替:邮件:站长:webmaster@example.com
如果你的参数是字符串与空间开始或结束,包含特殊字符(如“octothorpe”(#)或逗号),或关键字,如“不,假的,“(一个字符串的目的是)你必须将值包括在单引号,如清单5 - 2所示。
清单5 - 2 -非标准字符串应该包含在单引号
error1:这个字段是强制性error2:这个字段是强制性的error3:“不要离开这一领域的空白”error4 #单引号必须翻了一番:“输入#符号定义一个分机号码”i18n:“没有”#如果我们离开这里的报价,一个布尔将返回false
你可以定义在多行字符串,以及多重线弦,特殊字符串头(>和|)加上一个额外的缩进。清单5 - 3展示了本公约。
清单5 - 3 -定义长和多行字符串
#折叠方式,引入了> #每个换行是折叠空间#使得YAML更具可读性的成就:>马克在1998年大联盟全垒打纪录。#文字风格,引入了| #换行符数#压痕并不出现在生成的字符串数据:| 65支全垒打0.278打击率
定义一个值作为一个数组,包括元素在方括号或使用破折号的扩展语法,如清单5所示。
清单5 - 4 - YAML数组的语法
#简写语法数组球员:[马克麦奎尔,萨米·索萨,Ken Griffey] #阵列扩展语法球员:-马克麦奎尔萨米·索萨- Ken Griffey
定义一个值作为关联数组,或散列,将元素在花括号和总是插入一个空格之间的键和值键:值
对,任何列表项之间用逗号分隔。您还可以使用扩展语法通过增加缩进和每一个新的回车键,见清单盘中。
清单盘中- YAML关联数组的语法
#错误语法,空白失踪冒号、逗号邮件:{站长:webmaster@example.com,联系:contact@example.com} #正确简写语法关联数组邮件:{站长:webmaster@example.com,联系:contact@example.com} #扩展语法关联数组的邮件:站长:webmaster@example.com联系:contact@example.com
给一个布尔值,你可以选择从许多表示。清单5 - 6显示了完整的清单将转换为布尔值的解析器,只要他们不包含在报价。
清单5 - 6 - YAML布尔值语法
true_values:(,真的,+,是的,y] false_values:[错误,-,不,n]
不犹豫地添加评论(从散列马克,#
)和额外的空间值让你YAML文件可读性更强,如清单5 - 7所示。
清单5 - 7 - YAML注释语法和价值定位
#这是一个注释行邮件:站长:webmaster@example.com联系:contact@example.com管理:admin@example.com #额外空间允许的对齐值
在一些symfoob娱乐下载ny的配置文件,你会看到,从一个散列马克(,因此,由YAML解析器忽略),但看起来像往常一样设置。这是一个symfonob娱乐下载y公约:默认配置,继承其他YAML文件位于symfony核心,重复在注释行应用程序配置中,为您的信息。如果你想改变这样一个参数的值,您需要首先取消注释行,如清单5 - 8所示。
清单5 - 8 -默认配置显示评论
#默认缓存关闭设置:#缓存:#如果你想改变这个设置,取消第一线设置:缓存:
ob娱乐下载Symfony有时组织分类的参数定义。所有设置给定类别的类别标题下出现缩进。构建长列表的键:值
对通过分组分类提高了可读性的配置。分类标题从一个点开始(。
)。清单5 - 9显示了一个示例的类别。
清单5 - 9 -类别标题看起来像钥匙,但从一个点开始
:.general:税:19.6邮件:站长:webmaster@example.com
在这个例子中,邮件
是一个关键,一般
只是一个类别标题。一切都是如果类别标题不存在,如清单5 - 10所示。的税
参数实际上是一个直接的孩子所有
关键。然而使用类别有助于在symfony处理数组ob娱乐下载所有
关键。
清单5 - 10 -类别标题只是有可读性和实际上是忽视了
:税:19.6邮件:站长:webmaster@example.com
侧边栏
如果你不喜欢YAML
YAML只是一个接口来定义设置使用PHP代码,所以配置YAML文件中定义最终被转换为PHP。浏览应用程序后,检查它的缓存配置(在缓存/ myapp / dev / config /
,例如)。你会看到相对应的PHP文件YAML配置。你会了解更多关于配置缓存在本章后面。
好消息是,如果你不欧宝平台是合法的吗想使用YAML文件,你仍然可以手工做什么配置文件,在PHP中或通过另一种格式(XML、INI等等)。在本书中,你会遇到没有YAML替代方法来定义配置,甚至你会学会取代symfony的配置处理程序(第十九章)。ob娱乐下载如果你明智地使用它们,这些技巧将使您能够绕过配置文件或定义自己的配置格式。
YAML文件的帮助下,杀了我的程序!
YAML文件被解析为PHP哈希表和数组,然后应用程序的各个部分中使用的值修改视图的行为,控制器,或模型。很多时候,当有一个问题在YAML文件,这是才发现真的需要使用价值。此外,然后抛出错误或异常,通常不清楚YAML相关配置文件。
如果您的应用程序配置更改后突然停止工作,您应该检查,你没有做任何的疏忽的YAML编码器的常见错误:
你错过一个空间之间的键和值:
key1: value1 #后空间缺失:
钥匙在序列不缩进相同的方式:
:key1: value1 key2: value2 #压痕不一样其他序列成员key3: value3
有一个保留YAML字符的键或值,没有字符串分隔符:
信息:告诉他:#:,[,]{和}保留在YAML消息:”告诉他:去“#正确的语法
你修改注释行:
# #键:值永远不会考虑由于领导#
你设置具有相同键值的名字两次在同一水平:
key1: value1 key2: value2 key1: value3 # key1定义两次,最后一个定义的值
你认为设置特殊类型,虽然总是一个字符串,直到你把它:
收入:12345 #,直到你把它,这仍然是一个字符串
配置文件的概述
配置分成文件,按主题。文件包含参数定义,或设置。这些参数可以覆盖在几个水平(项目、应用程序和模块);一些特定于一定水平。接下来的章节将处理与主题相关的配置文件,和第十九章将处理高级配置。
项目配置
有一些项目默认配置文件。以下是文件中可以找到myproject / config /
目录:
config。
:这是第一个文件执行的任何请求或命令。它包含的路径框架文件,您可以将它更改为使用不同的安装。如果你添加一些定义
语句结束时,这个文件,常数将从项目的每个应用程序访问。看到第十九章这个文件的高级用法。databases.yml
:这是你在哪里定义数据库的访问和连接设置(主机、登录密码,数据库名称,等等)。第八章将告诉你更多关于它。它也可以在应用程序级别覆盖。properties.ini
:此文件包含命令行工具使用的一些参数,包括项目名称和遥远的服务器的连接设置。见第十六章概述使用这个文件的功能。rsync_exclude.txt
:此文件指定目录必须被排除在服务器之间的同步。这是第十六章中讨论。schema.yml
和propel.ini
:这些是数据访问配置文件使用的推动(symfony的ORM层)。ob娱乐下载他们是用来推动图书馆使用symfony类和项目的数据。ob娱乐下载schema.yml
包含项目的关系数据模型的表示。propel.ini
是自动生成的,所以你可能不需要修改它。如果你不使用驱动,不需要这些文件。第八章将告诉你更多关于它们的使用。
这些文件大多是由外部组件或使用命令行,或者他们需要处理之前任何YAML解析程序可以加载框架。这就是为什么他们中的一些人不使用YAML格式。
应用程序配置
的主要部分配置应用程序配置。它是在前端控制器(中定义web /
目录)主要常数,在YAML文件位于应用程序配置/
目录,i18n /
为国际化文件目录,在看不见的框架文件——尽管有用的额外的应用程序配置。
前端控制器配置
第一个应用程序配置实际上是在前端控制器;这是第一个脚本执行的请求。看看默认值web / index . php
第5 - 11在清单。
第5 - 11清单-默认生产前端控制器
< ? php定义(“SF_ROOT_DIR”,realpath(目录名(__FILE__)。“/ . .”));定义(“SF_APP”,“myapp”);定义(“SF_ENVIRONMENT”,“刺激”);定义(“SF_DEBUG”,假);require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR。“应用程序”.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR。“配置”.DIRECTORY_SEPARATOR。“config . php”);sfContext::getInstance()- >getController()- >调度();
定义应用程序的名称(后myapp
)和环境(刺激
),一般的配置文件叫做调度之前。这里几个有用的常量定义:
SF_ROOT_DIR
:项目根目录(通常情况下,应该保持在其默认值,除非你改变文件结构)。SF_APP
:在项目的应用程序名称。需要计算文件路径。SF_ENVIRONMENT
:环境名称(刺激
,dev
,或任何其他特定项目的环境,您定义)。将决定使用哪些配置设置。环境是在本章后面解释。SF_DEBUG
:激活调试模式(有关详细信息,请参阅16章)。
如果你想改变一个值,你可能需要额外的前端控制器。下一章将告诉你更多关于前端控制器和如何创建一个新的。
侧边栏
根目录可以在任何地方
只有文件和脚本位于web根(下web /
目录在symfony项目)可从ob娱乐下载外面。前端控制器脚本、图像、样式表和JavaScript文件。所有其他文件必须在服务器web根——这意味着他们可以在其他地方。
项目的非公开文件访问的前端控制器SF_ROOT_DIR路径。经典,根目录是一个级别的web /
目录中。但你可以选择一个完全不同的结构。想象你的主目录结构是由两个目录,一个公共和私人:
ob娱乐下载symfony / #私人领域的应用/批/缓存/…www / #公共区域图像/ css / js / index . php
在这种情况下,根目录ob娱乐下载symfony /
目录中。因此,index . php
前端控制器只需要定义SF_ROOT_DIR
应用程序的工作如下:
定义(“SF_ROOT_DIR”,目录名(__FILE__)。“/ . . / symfoob娱乐下载ny”);
第十九章会给你更多的信息关于如何调整symfony,使其工作在一个特定的目录结构。ob娱乐下载
主要应用程序配置
主应用程序配置文件存储在位于/ myapp / config / myproject /应用程序
目录:
app.yml
:这个文件应该包含特定于应用程序的配置;也就是说,全局变量定义业务或应用逻辑特定于应用程序,而不需要存储在数据库中。税率,运输票价,和电子邮件地址通常存储在这个文件中。它默认是空的。config。
:该文件成功应用程序,这意味着它所有的非常基本的初始化允许应用程序开始。在这里您可以定制您的目录结构或添加特定于应用程序的常量(第十九章提供了更多细节)。它包括项目的开始config。
。factories.yml
:Sob娱乐下载ymfony定义自己的类来处理视图、请求、响应、会话等等。如果你想使用自己的类相反,在这里,您可以指定它们。第十七章提供了更多的信息。filters.yml
:过滤器是部分代码为每个请求执行。这个文件中,可以定义要处理哪些过滤器,它可以覆盖每个模块。第六章详细讨论了过滤器。logging.yml
:这个文件定义必须记录在日志的详细级别,来帮助您管理和调试应用程序。使用这种配置在第十六章说明。routing.yml
:路由规则,允许将不可读和unbookmarkable url转换为“智能”和明确的,存储在这个文件中。对于新的应用程序,一些默认的规则存在。第九章是关于链接和路由。settings.yml
:主要设置symfony应用程序在这个文件中定义。ob娱乐下载这就是你指定如果您的应用程序有国际化,其默认语言,请求超时和缓存是否打开。一行变化在这个文件中,您可以关闭应用程序可以执行维护或升级它的一个组件。常见的第十九章中描述的设置和使用。view.yml
:默认视图的结构布局的名称、标题和元标记;默认的样式表和JavaScript文件包括;默认内容类型,等等)被设置在这个文件中。它还定义了默认值的元数据和标题标签。第七章将告诉你更多关于这个文件。为每个模块可以覆盖这些设置。
国际化配置
国际化了的应用程序可以在多种语言显示页面。这需要特定的配置。有两种配置国际化的地方:
i18n.yml
应用程序的配置/
目录:这个文件定义了通用翻译设置,如默认的文化翻译,翻译是否来自文件或数据库,和他们的格式。- 翻译文件的应用程序
i18n /
目录:这些基本上是词典,翻译的短语中使用的应用程序模板,页面显示当用户切换语言翻译文本。
注意,激活i18n特性设置的settings.yml
文件。你会发现更多的信息关于这些特性在第13章。
额外的应用程序配置
第二组配置文件在symfony安装目录(在ob娱乐下载美元sfob娱乐下载_symfony_ data_dir / config /
),不出现在配置应用程序的目录。有违约定义的设置很少需要修改,或全球的所有项目。然而,如果您需要修改它们,就创建一个空文件名称相同的在你的/ myapp / config / myproject /应用程序
目录,并覆盖设置你想要改变。设置中定义应用程序总是优先于框架中定义的。以下是安装symfony的配置文件配置/目录:ob娱乐下载
autoload.yml
:此文件包含的设置半自动的特性。这个功能你免除要求定制类在代码中如果他们位于特定目录。它是在19章详细描述。constants.php
:此文件包含默认应用程序文件结构。要覆盖此文件的设置,使用应用程序config。
在19章,解释道。core_compile.yml
和bootstrap_compile.yml
:这些是列表的类包含一个应用程序(在开始bootstrap_compile.yml
)和(在处理一个请求core_compile.yml
)。这些类实际上是连接到一个优化PHP文件没有意见,这将加速执行通过最小化的文件访问操作(加载一个文件而不是四十多为每个请求)。这是特别有用如果你不使用一个PHP加速器。优化技术是第18章中描述。config_handlers.yml
:在这里你可以添加或修改处理器用于处理每个配置文件。第十九章提供了更多的细节。php.yml
:该文件检查的变量php . ini
文件正确定义和允许您覆盖它们,如果必要的。第十九章检查细节。
模块配置
默认情况下,一个模块没有特定的配置。但是,如果需要,您可以重写一些应用程序级别设置为给定的模块。例如,您可能做这个改变的HTML描述的所有操作模块,或者包含一个特定的JavaScript文件。你也可以选择添加新的参数限制到一个特定的模块维护封装。
正如你可能已经猜到了,模块配置文件必须位于myproject /应用程序/ myapp /模块/ mymodule里/ config /
目录中。这些文件如下:
generator.yml
:根据数据库表生成模块(脚手架和政府),这个文件定义了界面显示行和字段,并向用户提出了交互(过滤、排序按钮,等等)。第14章将告诉你更多关于它。module.yml
:此文件包含自定义参数特定于模块(相当于app.yml
,但在模块级)和行动配置。第六章提供了更多的细节。security.yml
:该文件设置访问限制行动。这就是你只指定一个页面可以查看注册用户或注册用户有特殊权限的一个子集。第六章将告诉你更多关于它。view.yml
:此文件包含配置的观点一个或所有模块的行为。它将覆盖应用程序view.yml
第七章中描述。- 数据验证文件:虽然位于
验证/
目录,而不是配置/
YAML数据验证文件,用于控制输入的数据形式,也是模块配置文件。您将学习如何在第十章中使用它们。
大多数模块配置文件提供的能力定义为所有的观点或行为参数的一个模块,或其中的一个子集。
侧边栏
太多的文件?
你可能会被配置文件存在于应用程序的数量。但请记住以下:
大多数时候,你不需要改变配置,因为默认约定匹配最常见的需求。每个配置文件与一个特定的功能,和下一章节将详细介绍它们的使用。当你专注于一个文件,你可以清楚地看到它,以及它是如何组织起来。对于专业的web开发,默认配置通常不是完全适应。配置文件允许一个简单的修改symfony机制没有代码。ob娱乐下载想象的PHP代码必须实现相同数量的控制。如果所有的配置都位于一个文件,文件不仅是完全不可读,但是你不能重新定义配置在几个水平(见本章后面的“级联配置”一节)。
配置系统是symfony的优点之一,因为它使symfony用于几乎所有类型的web应用程序,而不是只对那些最初的设计ob娱乐下载的框架。
环境
在应用程序开发过程中,你可能会需要几套并行的配置。例如,您需要设置测试数据库的连接可以在开发期间,和那些你真正的数据用于生产。回答并发的需要配置,symfony提供了不同的环境。ob娱乐下载
什么是环境?
应用程序可以在不同的环境中运行。不同的环境中共享相同的PHP代码(除了前端控制器),但是可以有完全不同的配置。对于每个应用程序,symfony提供了三个默ob娱乐下载认环境:生产(刺激
)、测试(测试)、发展(开发)。你也可以添加任意数量的定制环境。
所以基本上,环境和配置是同义词。例如,一个测试环境将日志警告和错误,而刺激
环境只会记录错误。缓存加速度通常是关闭的dev
环境,但激活测试
和刺激
环境。的dev
和测试
环境可能需要测试数据,存储在数据库中不同于一个在生产环境中使用。因此,数据库配置在两个环境之间会有所不同。所有环境都可以住在一起在同一台机器上,尽管通常只包含生产服务器刺激
环境。
在dev
环境,都启用日志和调试设置,因为维护比性能更重要。相反,促使环境默认设置优化性能,因此生产配置关闭许多特性。一个好的经验法则是在开发环境中导航直到你满意的特性,然后切换到生产环境来检查它的速度。
测试环境不同于在其他方面开发和推动环境。你与这个环境只通过命令行功能测试的目的和批处理脚本。因此,测试环境接近生产,但不是通过web浏览器访问。它模拟了使用饼干和其他HTTP特定组件。
改变你的环境浏览您的应用程序,只是改变前端控制器。到目前为止,您已经看到了开发环境,由于使用的url示例称为开发前端控制器:
http://localhost/myapp_dev.php/mymodule/index
然而,如果你想看看反应在生产中的应用,把生产前端控制器:
http://localhost/index.php/mymodule/index
如果您的web服务器启用了mod_rewrite,您甚至可以使用自定义symfony重写规则,编写的ob娱乐下载web / . htaccess
。他们生产前端控制器定义为默认执行脚本,并允许url是这样的:
http://localhost/mymodule/index
侧边栏
环境和服务器
不要混淆概念的环境和服务器。在syob娱乐下载mfony中,不同的环境不同的配置,对应于一个前端控制器(执行的脚本请求)。不同的服务器URL对应于不同的域名。
http://localhost/myapp_dev.php/mymodule/index_________ _____________ server environment
通常,开发人员在开发应用程序服务器断开互联网和所有的服务器和PHP配置可以改变。时发布应用程序生产,应用程序文件转移到生产服务器和终端用户可以访问该。
这意味着许多环境中每个服务器上都是可用的。例如,你甚至可以在生产环境中运行在您的开发服务器上。然而,大多数时候,只能访问生产环境在生产服务器,避免公共服务器配置的可见性和安全风险。
添加一个新的环境,你不需要创建一个目录或者使用symfony CLI。ob娱乐下载简单地创建一个新的前端控制器和改变环境名称定义。这种环境下继承了所有默认配置+共同环境的设置。下一章将告诉你如何做到这一点。
配置级联
相同的设置可以定义不止一次,在不同的地方。例如,您可能希望设置页面的mime类型text / html
对于所有的应用程序,除了的页面rss
需要一个模块text / xml
mime类型。ob娱乐下载Symfony给你写第一个设置的能力myapp / config / view.yml
和第二个myapp /模块/ rss / config / view.yml
。配置系统知道设置在模块级定义必须覆盖一个设置在应用程序级别定义。
事实上,有几个symfony的配置水平:ob娱乐下载
- 粒度级别:
- 缺省配置位于框架
- 为整个项目(在全球配置
myproject / config /
) - 项目的本地配置为应用程序(在
/ myapp / config / myproject /应用程序
) - 一个模块(在本地配置限制
myproject /应用程序/ myapp /模块/ mymodule里/ config /
)
- 环境水平:
- 具体到一个环境
- 适用于所有环境
可以定制的所有属性,许多人依赖环境。因此,许多YAML配置文件/环境,加上尾部为所有环境。结果是,典型的symfony的配置如清单5 - 12所ob娱乐下载示。
清单5 - 12 - Symfony的配置文件的结构ob娱乐下载
#生产环境设置刺激:……# dev开发环境设置:……#测试环境设置测试:……#定义环境设置myenv:…#设置所有环境:……
此外,框架本身定义了默认值在文件不是位于项目树状结构,但在美元sf_symfony_data_dir / config / symfony安装的目录。ob娱乐下载默认的配置是设置在第5 - 13这些文件见清单中。这些设置是由所有应用程序继承。
第5 - 13清单——默认配置美元sfob娱乐下载_symfony_data_dir / config / settings.yml
#默认设置:默认值:default_module:默认default_action:指数…
这些默认定义重复的项目,应用程序,注释和模块配置文件,如清单为5 - 14所示,这样你知道一些参数定义默认情况下,他们可以修改。
清单为5 - 14 -默认配置,重复的信息,myapp / config / settings.yml
#:# default_module:默认# default_action:指数……
这意味着一个属性可以定义几次,结果和实际价值定义级联。参数定义一个命名环境优先于相同的参数定义为所有环境,优先于一个定义的默认配置。一个参数定义在模块级别优先于相同的参数定义在应用程序级别,这比一个定义在项目级别。这可以在以下优先级列表:
- 模块
- 应用程序
- 项目
- 特定的环境
- 所有环境
- 默认的
配置缓存
YAML解析和处理在运行时配置级联是一个重大的开销为每个请求。ob娱乐下载Symfony有一个内置的配置缓存机制旨在加快请求。
配置文件,无论他们的格式,是由一些特殊的处理类,称为处理器,将它们转换为快速处理PHP代码。在开发环境中,在每个请求处理程序检查配置的更改,以促进互动。他们解析最近修改的文件,这样您就可以立即看到YAML文件的变化。但是在生产环境中,处理一次在第一个请求,然后处理PHP代码是后续请求存储在缓存中。性能保证,因为每个请求的生产只会执行一些优化的PHP代码。
例如,如果app.yml
文件包含:
:#设置为所有环境邮件:站长:webmaster@example.com
然后文件config_app.yml.php
位于缓存/
你的项目文件夹,将包含:
< ? phpsfConfig::添加(数组(“app_mail_webmaster”= >“webmaster@example.com”,));
因此,大多数时候,YAML文件甚至不解析的框架,它依赖于配置缓存。然而,在开发环境中,symfony会系统地比较YAML文件的修改日期和缓存文件,和ob娱乐下载再加工,只有那些已经改变了从先前的请求。
这提出了一个重大优势许多PHP开发框架,在每个请求编译配置文件在哪里,即使在生产。与Java、PHP请求之间不共享一个执行上下文。对于其他PHP开发框架,保持XML配置文件需要的灵活性主要性能下降过程在每个请求的所有配置。这不是在symfony。ob娱乐下载由于缓存系统,配置造成的开销非常低。
这种机制是一个重要的后果。如果你改变配置在生产环境中,您需要力量的重新解析配置文件的修改需要考虑。,你只需要清除缓存,通过删除缓存的内容/目录,或者更容易,通过调用clear-cache symfony的任务:ob娱乐下载
>清ob娱乐下载除缓存后
从代码访问配置
所有的配置文件最终转换为PHP,和许多设置它们包含自动使用的框架,没有进一步的干预。然而,有时你需要访问的一些设置在配置文件中定义的代码(在操作,模板,自定义类,等等)。中定义的设置settings.yml
,app.yml
,module.yml
,logging.yml
,i18n.yml
可通过一个特殊的类叫什么sfConfig
。
sfConfig类
你可以从应用程序代码中通过访问设置sfConfig
类。是一个注册表的配置参数,用一个简单的getter类方法,可以从每一部分的代码:
/ /检索设置美元的参数= sfConfig::得到(“param_name”,default_value美元);
请注意,您还可以定义或覆盖,设置在PHP代码:
/ /定义一个设置sfConfig::集(“param_name”,美元的价值);
参数名称是连接的几个元素,被强调,在这个顺序:
- 一个前缀相关配置文件名称(
sf_
为settings.yml
,app_
为app.yml
,的mod_
为module.yml
,sf_i18n_
为i18n.yml
,sf_logging_
为logging.yml
) - 父键(如果定义),在小写的
- 关键的名字,小写的
不包括环境,因为PHP代码定义的值只会获得对环境的执行。
例如,如果您需要访问中定义的值app.yml
文件清单5 - 15所示,您将需要清单5-16中所示的代码。
清单5 - 15——示例app.yml
配置
所有:.general:税:19.6 default_user:名称:John Doe邮件:站长:webmaster@example.com联系:contact@example.com dev:邮件:站长:dummy@example.com联系:dummy@example.com
清单5-16 -访问PHP的配置设置dev
环境
回声sfConfig::得到(“app_tax”);/ /记住类别标题将被忽略= >“19.6”回声sfConfig::得到(“app_default_user_name”);= >“John Doe”回声sfConfig::得到(“app_mail_webmaster”);= >“dummy@example.com”回声sfConfig::得到(“app_mail_contact”);= >“dummy@example.com”
所以sob娱乐下载ymfony的配置设置PHP的所有优势常数,但没有缺点,因为值可以改变。
在这个帐户,settings.yml
文件,你可以设置框架为应用程序设置,相当于的列表sfConfig::设置()
调用。清单5解释见清单5日至18日期间召开。
清单5 -提取的settings.yml
:.settings:可用:path_info_array:服务器path_info_key: PATH_INFO url_format:路径
清单5日至18日期间召开——什么Symfob娱乐下载ony当解析settings.yml
sfConfig::添加(数组(“sf_available”= >真正的,“sf_path_info_array”= >“服务器”,“sf_path_info_key”= >“PATH_INFO”,“sf_url_format”= >“路径”,));
请参考19章设置中发现的意义settings.yml
文件。
自定义应用程序设置和app.yml
的大部分设置相关功能应该存储在一个应用程序app.yml
文件,位于/ myapp / config / myproject /应用程序
目录中。这个文件是默认依赖环境和空。放在每一个设置你想要轻易改变,并使用sfConfig
类从代码访问这些设置。清单5-19显示了一个示例。
清单5-19——示例app.yml
定义的信用卡运营商接受对于一个给定的网站
:信用卡:假:签证:americanexpress: dev:信用卡:假:在
知道如果假的
信用卡被接受在当前环境下,得到的值:
sfConfig::得到(“app_creditcards_fake”);
请注意
当你需要一个PHP数组直接下所有
关键你需要使用一个类别标题,否则symfony将可用的值分别如上所示。ob娱乐下载
:.array:信用卡:假:签证:americanexpress:在(php) print_r (sfConfig:: (' app_creditcards '));阵列((假)= >假(签证)= >真[americanexpress] = > true)
提示每次你想定义一个常数或设置在你的一个脚本,想想如果它位于上会更好app.yml
文件。这是一个非常方便的地方来存储所有的应用程序设置。
当你需要自定义参数就很难处理app.yml
语法,您可能需要定义一个自己的语法。在这种情况下,您可以在一个新的文件存储配置,被一个新的配置处理程序。更多信息请参考19章配置处理程序。
建议从配置文件获取更多
最后有一些技巧来学习之前编写自己的YAML文件。他们会让你避免配置复制和处理自己的YAML格式。
使用YAML中常量配置文件
配置设置的值依赖于其他一些设置。为了避免设置相同的值的两倍,symfony支持YAML文件中的常量。ob娱乐下载在遇到一个设置名称(可以访问sfConfig: get ()
)用大写字母封闭%
迹象,配置处理程序取代他们的当前值。参见清单5 - 20为例。
清单5 - 20 -在YAML文件,使用常量的例子autoload.yml
自动装载:symfoob娱乐下载ny:名称:symfony路径:% SF_SYMFONY_LIB_DIR %递归:排除:(供应商)
的路径参数将返回的值sfConfig: get (“sfob娱乐下载_symfony_lib_dir”)
。如果你想要一个依靠另一个配置文件,您需要确保您依赖已经解析的文件(在symfony源找到配置文件解析)的顺序。ob娱乐下载app.yml
是一个最后的文件解析,所以你可能会依赖他人。
使用脚本配置
它可能发生,您的配置依赖于外部参数(比如数据库或另一个配置文件)。处理这些特殊的情况下,symfony的配置文件被解析为PHP文件被传递到之前YAMob娱乐下载L解析器。这意味着您可以将PHP代码在YAML文件中,如清单5 - 21日。
清单5 - 21日- YAML文件可以包含PHP
:翻译:格式:< ?php echo (sfConfig: get (sf_i18n) = =真的吗?“xliff”:“没有一个”)。“\ n”? >
但是请注意配置解析早期生活的请求,所以你不会有任何symfony内置的方法或函数来帮助你。ob娱乐下载
同时,作为回声
语言结构不添加一个默认回车,您需要添加一个“\ n”或使用echoln
帮助保持YAML格式有效。
:翻译:格式:< ?php echoln sfConfig: get (sf_i18n) = =真的吗?xliff的:“没有一个”? >
谨慎
在生产环境中,配置缓存,所以配置文件解析和执行清除缓存后只有一次。
浏览自己的YAML文件
每当你想直接读YAML文件,您可以使用sfYaml
类。YAML解析器,可以把YAML文件变成一个PHP关联数组中。清单5-22给出了一个示例YAML文件,清单5-23显示了你如何解析它。
清单5-22——示例test.yml
文件
房子:家庭:名称:能源部父母:[约翰,简]儿童:[保罗,马克,西蒙]地址:数量:34街:主要街道城市:Nowheretown zipcode: 12345
清单5-23——使用sfYaml
类将YAML文件转化为一个关联数组中
美元的测试= sfYaml::负载(“/道路/ / test.yml”);print_r(美元的测试);数组((房子]= >数组((家庭]= >数组((的名字]= >能源部(父母]= >数组((0]= >约翰(1]= >简)(孩子们]= >数组((0]= >保罗(1]= >标记(2]= >西蒙))(地址]= >数组((数量]= >34(街]= >主要街道(城市]= > Nowheretown(zipcode]= >12345年)))
总结
symfob娱乐下载ony的配置系统使用YAML语言简单、可读。能够处理多个环境和设置参数通过一个定义级联为开发者提供多功能性。可以从内部访问的一些配置代码通过sfConfig
对象,尤其是中存储的应用程序设置app.yml
文件。
是的,syob娱乐下载mfony的确有很多配置文件,但是这种方法使它更具有适应能力。记住,你不需要与他们打扰,除非您的应用程序需要一个高水平的定制。
这项工作是GFDL许可执照。