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