symfony权威指南(3)之symfony配置

在开始阅读本文之前建议先阅读笔者之前的一篇博文 yaml文件的语法及注意事项,了解一些关于yaml方面的相关知识。

第一次接触symfony的人可能会不太习惯symfony的配置文件,因为symfony的配置文件实在是太多了,而且还分了很多的层级,不过相信随着后期学习的深入,你会了解到symfony的这些配置文件给开发带来了很大的灵活性,利大于弊。

一、配置

1、项目配置(project)

项目相关的配置文件存放在项目根目录下的config目录下,如下截图所示:


各个配置文件的相关说明:

databases.yml:该文件主要用来存放数据库连接设置,可以被应用程序级的配置覆盖

properties.ini:这个文件存放命令行工具需要的参数,包括项目名称,远程服务器的连接设置

rsync_exclude.txt:这个文件定义同步服务器的时候哪些文件不需要同步

schema.yml 与 propel.ini:这两个文件是Propel(symfony 的ORM 层)的数据访问配置文件。它们用来使Propel 与symfony 的类还有项目的数据协同工作。propel.ini 是自动生成的,所以你不用修改它。如果你不用Propel,就不需要这些文件。


2、应用程序配置(apps)

相关应用程序的配置文件存放在应用程序下的config目录下,如下图所示:


各个配置文件的相关说明:

app.yml:这个文件存放应用程序相关的配置信息,包括定义业务或者程序逻辑的全局变量,这些都不需要存放在数据库里。税率,运费,e-mail地址等经常存放在这个文件。这个文件默认是空的。

factories.yml:symfony 在这里定义处理视图、请求、回应、会话(session)等的类。如果你想用你自己的类取代symfony 的类,你可以在这里定义它们。

filters.yml:过滤器是在每个请求都被执行的一小段代码。这个文件用来定义哪些过滤器需要被执行,每个模块都可以改写过滤器配置。

settings.yml:这个文件存放symfony 应用程序的主要配置信息。你的应用程序是否使用国际化功能,它的默认语言,请求timeout 时间,是否开启缓存功能等都在这个文件里面定义。只要改变这个文件里的一行代码,你就可以关闭网站来执行维护升级器是在每个请求都被执行的一小段代码。这个文件用来定义哪些过滤器需要被执行,每个模块都可以改写过滤器配置。

routing.yml:路由规则,能把难以理解的不好记忆的URL 变成"漂亮"的直观形式。此配置文件用来存放这些信息。每个新应用程序都会有一些默认路由规则。

view.yml:这个文件里定义默认视图的结构(布局的名称,标题,还有metatag;默认载入的样式表及Javascript;默认的content-type 等)。还有默认的meta 与标题标签。


3、模块配置(module)

默认情况下,模块没有特别的配置信息。不过,如果你需要,你可以为某个模块覆盖应用程序级的配置。例如,你需要修改一个模块里所有动作的HTML 描述信息,或是载入一个特定的Javascript 文件。你可以选择针对某个特定的模块增加新参数来实现保护性封装。

比如建立如下图所示的目录和文件:


generator.yml:根据数据库表自动生成的模块(脚手架与管理后台)会用这个文件, 它用来定义界面怎么显示行和列,用户可以执行哪些操作(过滤器,排序,按钮等)。

module.yml:这个文件包含模块的特殊参数(相当于app.yml,但这是模块级的),还有动作的配置信息。

security.yml:这个文件用来给动作设置访问限制。你可以在这里设置哪个页面只能给注册用户看或是一部分有特殊权限的注册用户看。

view.yml:这个文件包含模块的一个或者所有动作的视图配置信息。它会覆盖应用程序级的view.yml。

数据验证文件:虽然这些用来验证表单输入数据的YAML 数据验证文件存放在validate/目录而不是config/目录里,它们仍然属于模块配置文件。


二、环境

如果你有过一些开发经验的话,你就会清楚再不同的开发环境下,配置是不同的,比如线上和线下的数据库配置信息肯定是不同的,那么如何在symfony中配置不同的开发环境呢?其实很简单,下面是一个示例:

symfony 配置文件的结构
# 生产环境设置
prod:
...
# 开发环境设置
dev:
...
# 测试环境设置
test:
...
# 自定义环境设置
myenv:
...
# 所有环境的设置
all:
...

任何一个特定环境里定义的参数优先于所有环境里定义的参数,所有环境里的参数优先于默认配置。模块配置里的参数优先于应用程序级里定义的同样参数,应用程序里的参数优先于项目级。这可以通过下面的优先级列表来表示:
1. 模块
2. 应用程序
3. 项目
4. 特定的环境

5. 所有环境

6. 默认


三、获取配置信息

在symfony框架中可以使用syConfig类来获取在配置文件中存放的信息,下面是一个示例:

在app.yml文件中定义appid和appsecret:

all:
  appid: wechatAppid
  appsercet: wechatAppserecet


注:symfony有配置缓存,如修改了配置文件,需要清理配置文件缓存,可以使用如下命令清除symfony框架的配置缓存:

执行完此命令后仔细观察cache目录的变化,会发现cache目录下的文件都被清空了(目录结构还继续保留)


在控制器中获取:

$host = sfConfig::get('app_appid');
参数的名字由几部分组成,中间用下划线分割,顺序如下:
① 与配置文件名有关的前缀 (sf_ 代表 settings.yml, app_ 代表app.yml, mod_ 代表 module.yml, sf_i18n_ 代表 i18n.yml,sf_logging_ 代表 logging.yml)
② 父键名 (如果有), 小写形式
③ 键名, 小写形式


symfony 支持在YAML 文件里使用常量。如果遇到%包起来的大写形式的设置名(可以通过sfConfig::get()取得值),配置文件处理器会用这个设置的当前值来替换这个常量。

autoload.yml中的示例:

autoload:
symfony:
name: symfony
path: %SF_SYMFONY_LIB_DIR%
recursive: on
exclude: [vendor]
path 参数的值会是执行sfConfig::get('sf_symfony_lib_dir')的结果。如果一个配置文件依赖于另一个配置文件,被依赖的配置文件必须先被解析(请查symfony 的源代码来了解配置文件载入的顺序)。app.yml 是最后被解析的文件之一,所以你可以在这个文件里使用其它文件里定义的设置。


除此之外,symfony的YAML 文件可以包含PHP代码,下面是一个示例:

all:
translation:
format: <?php echo sfConfig::get('sf_i18n') == true ? 'xliff' :
'none' ?>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值