2.3. Yaf的配置项

表 2.2. Yaf 配置选项

选项名称 默认值 可修改范围 更新记录
yaf.environ product PHP_INI_SYSTEM 环境名称, 当用INI作为Yaf的配置文件时, 这个指明了Yaf将要在INI配置中读取的节的名字
yaf.library "" PHP_INI_ALL 全局类库的目录路径
yaf.cache_config 0 PHP_INI_SYSTEM 已移除。是否缓存配置文件(只针对INI配置文件生效), 打开此选项可在复杂配置的情况下提高性能。该选项自 Yaf 3.0.0 起被移除
yaf.name_suffix 1 PHP_INI_ALL 在处理Controller, Action, Plugin, Model的时候, 类名中关键信息是否是后缀式, 比如UserModel, 而在前缀模式下则是ModelUser
yaf.name_separator "" PHP_INI_ALL 在处理Controller, Action, Plugin, Model的时候, 前缀和名字之间的分隔符, 默认为空, 也就是UserPlugin, 加入设置为"_", 则判断的依据就会变成:"User_Plugin", 这个主要是为了兼容ST已有的命名规范
yaf.forward_limit 5 PHP_INI_ALL forward最大嵌套深度
yaf.use_namespace 0 PHP_INI_ALL 开启的情况下, Yaf将会使用命名空间方式注册自己的类, 比如Yaf_Application将会变成Yaf\Application
yaf.action_prefer 0 PHP_INI_ALL 开启的情况下, 当路由的路径信息不完整的时候(比如只有一段路径), 会优先把路径解释为Action的名字, 而不是Controller的名字
yaf.lowcase_path 0 PHP_INI_ALL 开启的情况下, Yaf在加载MVC类的时候, 会把文件路径转换为小写
yaf.use_spl_autoload 0 PHP_INI_ALL 开启的情况下, Yaf在加载不成功的情况下, 会继续让PHP的自动加载函数加载, 从性能考虑, 除非特殊情况, 否则保持这个选项关闭


[警告] 警告
在开启yaf.cache_config的情况下, Yaf会使用INI文件路径作为Key, 这就有一个陷阱, 就是如果在一台服务器上同时运行俩个应用, 那么它们必须不能使用同一个路径名下的INI配置文件, 否则就会出现Application Path混乱的问题. 所以, 尽量不要使用相对路径.

配置项使用要点

以下几点在配置时容易踩坑, 值得特别注意:

  • yaf.forward_limit 是防止 Yaf_Controller_Abstract::forward 递归循环的保护。单次请求内链式转发的次数超出该限制时, 将抛出 Yaf_Exception_DispatchFailed。非正数值会被强制取默认值 5。

  • yaf.use_namespace 开启后, Yaf 的所有类将以命名空间风格命名, 例如 Yaf_Route_Rewrite 变为 \Yaf\Route\Rewrite。有一个例外: 最后一段是 PHP 保留关键字的类不能用作类名, 这类类的最后一段保留下划线, 例如 Yaf_Controller_Abstract 变为 \Yaf\Controller_Abstract, Yaf_Route_Static 变为 \Yaf\Route_Static

  • yaf.use_namespace 只在扩展启动时注册两种命名风格中的一种, 因此该指令必须在扩展加载之前设置(例如写在 php.ini 中), 无法在每个请求之间切换。

  • 关于 yaf.use_spl_autoload 的加载顺序: Yaf 在 Yaf_Application 实例化期间注册它自己的加载器, 因此在此之前注册的任何其他自动加载函数都会先于 Yaf_Loader::autoload 被调用。

  • yaf.environ 也可以通过给 Yaf_Application::__construct 传递第二个构造参数, 为每个应用单独覆盖环境名称。