FleaPHP 是一个具有高度灵活性的框架。开发者可以用不同的设置来调整 FleaPHP 的工作方式。这些设置统一保存在名为“应用程序设置”的数据源中。
实际上,除了 FleaPHP 框架本身,应用程序也可以使用“应用程序设置”来保存应用程序运行时需要的各种设置。
FleaPHP 的应用程序设置有一个默认配置文件,保存在 FLEA/Config/Default_APP_INF.php
中。应用程序可以在入口文件(例如 index.php
)中修改这些设置,以便调整 FleaPHP 的工作方式。
如何使用应用程序设置?
当 FleaPHP 框架初始化时,默认的应用程序设置文件(Default_APP_INF.php
)会被载入。如果应用程序要指定设置,推荐的做法有下列几种:
创建应用程序的私有设置文件
当需要指定多个应用程序设置时,推荐使用该方法。具体的做法非常简单,只需要定义类似如下的文件即可(假设下面的内容保存到文件 APP/Config/MY_APP_INF.php
)。
<?php
return array(
'defaultController' => 'UserCenter',
'urlLowerChar' => false,
'dispatcher' => 'FLEA_Dispatcher_Auth',
'dbDSN' => array(
'driver' => 'mysql',
'host' => 'localhost',
'login' => 'root',
'password' =>空字符串,
'database' => 'test',
),
);
?>
然后在应用程序的入口文件 index.php
中调用 run()
函数的代码前,增加一行 register_app_inf('APP/Config/MY_APP_INF.php')
即可。例如:
<?php
require('FLEA/FLEA.php');
register_app_inf('APP/Config/MY_APP_INF.php');
run();
?>
直接在入口文件中指定设置
对于少量的设置,可以在入口文件中直接用 set_app_inf()
函数指定。例如:
<?php
require('FLEA/FLEA.php');
set_app_inf('defaultController', 'UserCenter');
run();
?>
不管采用哪一种方式,重要的都是必须在 run()
之前就指定好应用程序设置。
默认的应用程序设置
默认的应用程序设置提供了符合常见应用程序运行需要的设置。下面分类列出这些设置的名字和详细说明。
核心配置
- namespace 应用程序的默认名字空间,默认值为空字符串这个设置会影响到应用程序所有类的名称定义。例如
namespace
设置为FOO
时,应用程序所有控制器、模型的类名字都要加上前缀FOO_
。变成诸如FOO_Controller_Default
、FOO_Model_News
等。为了让你的代码能够更容易的在其他应用程序中复用,最好将 namespace 设置为空字符串。
- controllerAccessor 指示控制器的 URL 参数名,默认值为
controller
这个设置指定在 URL 查询参数中,用什么名字的参数指定控制器名字。例如 controllerAccessor 设置为 “ctl
” 时,就必须用index.php?ctl=MyController
来指定要调用的控制器。 - defaultController 指示默认控制器的名字,默认值为
Default
当url
参数中没有指定要调用的控制器时,将依据 defaultController 的设置调用默认的控制器。 - actionAccessor 和 defaultAction,默认值分别为
action
和index
这两个设置的作用和 controllerAccessor、defaultController 类似。只不过用于指定控制器动作的参数名和默认动作名。 - urlMode 指定 URL 分析和构造模式,默认值为
URL_STANDARD
URL 的分析和构造模式,目前支持三种,分别是:URL_STANDARD
、URL_PATHINFO
和URL_REWRITE
。URL_STANDARD
模式中,URL 参数采用采用标准的方式,例如index.php?controller=MyController&action=MyAction&class_id=2&sort=1
关于
URL_PATHINFO
和URL_REWRITE
的详细说明,请参考使用 PATHINFO 和 URL 重写。 - urlLowerChar 指示是否将
url
参数中包含的控制器名字和动作名字强制转为小写字符,默认值为false
对于 Windows 系统来说,这个设置无关紧要。而对于 Linux/Unix 系统来说,这个设置会关系到控制器类定义文件的命名。当 urlLowerChar 为
true
时,控制器名字会被转为小写字符,而该控制器的类名字除第一个字母为大写外,其他全为小写。例如控制器名为MyController
,实际的控制器类名称为Mycontroller
,对应的类定义文件为Mycontroller.php
。当 urlLowerChar 为
false
时,控制器名字和控制器的类名字完全对应,例如控制器名为QuickBenchmark
,实际的控制器类名称为QuickBenchmark
,对应的类定义文件为QuickBenchmark.php
。 - controllerClassPrefix 指示控制器类名称前缀,默认值为
Controller_
- actionMethodPrefix 和 actionMethodSuffix 指示控制器动作的方法名要加上的前缀和后缀,默认值分别为
action
和空字符串使用前缀和后缀可以,让控制器动作方法的名称和控制器中的其他方法区别开来。同时也可以避免无意中造成控制器内的私有方法被浏览器访问到。 - dispatcher 指示应用程序要使用的 URL 调度器,默认值为
FLEA_Dispatcher_Simple
URL 调度器分析 URL 参数,决定要调用的控制器和控制器动作方法,最后调用控制器动作方法。默认的FLEA_Dispatcher_Simple
是一个简单的调度器,仅仅是分析 URL 参数,然后完成调用工作。而更复杂的FLEA_Dispatcher_Auth
则可以结合FleaPHP
自带的RBAC
(基于角色的访问控制)组件完成访问控制功能。如果开发者自己编写了调度器,那么修改这个设置即可让应用程序使用开发者自己编写的调度器。
- dispatcherFailedCallback 指示调度器调度失败后,要调用的处理程序,默认值为
null
如果希望应用程序处理调度失败的情况(例如控制器或控制器方法不存在),则需要覆盖这个设置。
<?php
set_app_inf('dispatcherFailedCallback', 'appDispatcherFailedHandler');
?>
- internalCacheDir 指示 FleaPHP 内部及
cache
系列函数使用的缓存目录,默认值为FLEA/_Cache/
目录
- autoLoad 指示要自动载入的文件,默认载入
FLEA_Helper_Array.php
、FLEA_Helper_Html.php
和FLEA_Controller_Action.php
三个文件这个设置必须是一个数组,数组中每一个项目为要自动载入的文件。 - sessionProvider 指示要使用的
session
服务提供程序,默认值为null
如果设置为null
,则表示使用 PHP 自带的session
服务。 - autoSessionStart 指示是否自动起用
session
支持,默认值为true
如果该设置为true
,则每次 FleaPHP 框架初始化后都会自动执行session_start()
函数。 - requestFilters 指示使用哪些过滤器对 HTTP 请求进行过滤,默认值为空数组和 autoLoad 设置类似,该设置必须为数组。但数组中每一个项目为要运行的过滤器类名字。过滤器按照出现在数组中的顺序初始化和运行。
每一个过滤器实际上都是一个脚本,无需要实现为一个类。可以参考
FLEA/Filter/
目录中的过滤器代码实现自己的过滤器。FleaPHP 初始化时,会根据 PHP 运行环境设置和应用程序设置来决定是否自动运行
FLEA_Filter_MagicQuotes
和FLEA_Filter_Uri
过滤器。因此开发者不应该在 requestFilters 设置中调用这两个过滤器。
数据库相关
- dbDSN 数据库连接设置,必须是数组,默认值为
null
dbDSN
是 FleaPHP 应用程序默认的数据库连接设置。正确指定该设置后,FleaPHP 会在应用程序需要访问数据库时尝试自动连接数据库。dbDSN
数组中每个选项的含义如下:- driver 数据库驱动类型,例如
mysql
、pgsql
等; - host 数据库所在服务器,通常为
localhost
或127.0.0.1
- port 连接数据库的端口,通常无需指定
- login 连接时使用的用户名
- password 连接时使用的密码
- database 连接后要使用的数据库名
- charset 字符集设置,如果没有设置该选项,则以应用程序设置 databaseCharset 为准
- options 附加的连接选项
典型的 dbDSN 设置如下:
- driver 数据库驱动类型,例如
<?php
set_app_inf('dbDSN',
array(
'driver' => 'mysql',
'host' => 'localhost',
'login' => 'username',
'password' => 'password',
'database' => 'test_db',
)
);
?>
- dbTDGAutoInit 指示构造表数据入口对象时,是否自动连接到数据库,默认值为
true
如果你希望自己控制数据库连接,那么可以将该设置指定为false
。 - dbTablePrefix 指示数据表的全局前缀,默认为空字符串,该设置会影响到所有数据表
- dbValidationProvider 指示表数据入口要使用的数据验证服务对象,默认值为
FLEA_Helper_Validation
视图和模版相关
- view 指示要使用的模板引擎,PHP 表示使用 PHP 语言本身作模板引擎,默认值为
PHP
目前 FleaPHP 提供了FLEA_View_Simple
模版引擎和FLEA_View_Smarty
模版引擎。其中FLEA_View_Smarty
实际上是一个连接器,用于连接Smarty
模版引擎。 - viewConfig 指定模板引擎要使用的配置信息,默认为
null
不同模版引擎可能需要不同的配置,可以用viewConfig
设置来指定。
I18N
有关 FleaPHP 对 I18N 支持的详细信息,请参考开发指南的相关章节。
- responseCharset 指示 FleaPHP 输出内容的使用的编码,默认值为
gb2312
FleaPHP 核心本身并不假定要处理的内容采用什么编码,也不会自动将输入内容转换为输出内容指定的编码。responseCharset 设置仅仅是用来作为一个参考,特别是 autoResponseHeader 设置为true
时,FleaPHP 会自动送出Content-Type: text/html; charset=xxxxx
的 HTTP 头信息。 - databaseCharset 指示当 FleaPHP 连接数据库时,要指定的编码,默认值为
gb2312
许多较为高级的数据库,例如 PostgreSQL、MySQL 4.1/5.x、Oracle 等,都允许在数据库中保存不同编码的数据。因此开发者要正确设置 databaseCharset 设置,以便 FleaPHP 在连接数据库时能够正确设置编码,避免乱码问题。对于较老的数据库,例如 MySQL 3.x/4.0,这个设置没有意义。
- autoResponseHeader 指示是否自动输出
Content-Type: text/html; charset=xxxxx
的 HTTP 头信息,默认值为true
当该设置为true
时,FleaPHP 会在初始化时自动输出一个 HTTP 头信息,以指定应用程序输出内容的编码。具体指定什么编码,由 responseCharset 设置决定。对于大部分服务器,启用该设置可以避免出现浏览器无法正确识别输出内容编码的问题。但在某些服务器环境中,启用该设置会导致出现无法输出动态图像等问题。
- charsetConstant 指示是否自动定义
RESPONSE_CHARSET
、DATABASE_CHARSET
等常量,默认值为true
当该设置为true
时,FleaPHP 会在初始化时根据 responseCharset 和 databaseCharset 设置分别定义RESPONSE_CHARSET
和DATABASE_CHARSET
常量。应用程序可以用这两个常量简化一些开发。 - multiLangaugeSupport 指示是否启用多语言支持,默认值为
false
当该设置为true
时,会自动载入由 languageSupportProvider 指定的多语言支持服务提供程序。 - languageSupportProvider 指定提供多语言支持的提供程序,默认值为
FLEA_Com_Language
FLEA_Com_Language
是 FleaPHP 自带的多语言支持服务提供程序。 - languageFilesDir 指示语言文件的保存位置,默认值为
null
当使用多语言支持时,必须修改该设置,指向一个保存所有语言文件的目录。语言文件按照“语言/字典名.php”的目录结构存储,例如 languageFilesDir 设置为
/var/www/test/languages
,则语言文件的实际文件名就可能是:/var/www/test/languages/chinese-gb2312/user_interface.php
。 - defaultLanguage 指示默认语言,默认值为
chinese-gb2312
当载入语言文件时如果没有指定语言参数,则会从 defaultLanguage 指定的语言目录下载入字典文件。 - autoLoadLanguage 指示要自动载入的语言字典,默认值为
null
autoLoadLanguage 可以是数组,其中每一项是一个要载入的字典名。或者是一个用“,”分隔多个字典名的字符串。
FLEA_Dispatcher_Auth 和 RBAC 组件
- dispatcherAuthProvider 指示调度器要使用的验证服务提供程序,默认值为
FLEA_Com_RBAC
FLEA_Com_RBAC
提供了check()
方法,让调度器通过调用该方法来检查当前发起请求的用户是否有权限访问指定的控制器和控制器动作方法。如果开发者要编写自己的验证服务提供程序,就必须实现check()
方法。如果使用开发者自己编写的调度器,也可以通过该设置来指定验证服务提供程序。check()
方法的原型是:function check($roles, $ACT)
- defaultControllerACTFile 指示
RBAC
组件要使用的默认 ACT 文件,默认值为空字符串通过该设置,可以为多个控制器指定 ACT(访问控制表),而不需要为每一个控制器都提供一个.act.php
文件。注意,该设置指定的文件必须是完整路径,或者相对于应用程序入口(index.php
)的相对路径。 - autoQueryDefaultACTFile 指示
RBAC
组件是否在没有找到控制器的 ACT 文件时,是否从默认 ACT 文件中查询控制器的 ACT,默认值为false
- controllerACTLoadWarning 指示没有找到控制器的 ACT 时,是否显示警告信息,默认值为
true
- defaultControllerACT 指示当没有为控制器提供 ACT 时,要使用的默认 ACT,默认值为
null
- dispatcherAuthFailedCallback 指示用户没有权限访问控制器或控制器方法时,要调用的处理程序,默认值为
null
- RBACSessionKey 指示 RBAC 组件用什么键名在 session 中保存用户数据,默认值为
RBAC_USERDATA
如果在一个域名下同时运行多个应用程序,请务必为每一个应用程序使用自己独一无二的键名。
日志服务和错误处理
- logEnabled 指示是否启用日志服务,默认值为
false
如果该设置为true
,则会自动载入由 logProvider 设置指定的日志服务提供程序。 - logProvider 指示日志服务的程序,默认值为
FLEA_Com_Log
- logFileDir 指示用什么目录保存日志文件,默认值为
null
最好将日志保存在浏览器无法访问的目录中。 - logFilename 指示用什么文件名保存日志,默认值为
access.log
- logFileMaxSize 指示当日志文件超过多少 KB 时,自动创建新的日志文件,单位是 KB,不能小于 512KB,默认值为 4096
- logErrorLevel 指示哪些级别的错误要保存到日志中,默认值为 ‚warning, error, exception‘
- displayErrors 指示是否显示错误信息,默认值为
true
- friendlyErrorsMessage 指示是否显示友好的错误信息,默认值为
true