Yaf框架的配置

OldBoy~發表於2017-10-24
http://www.laruence.com/manual/yaf.ini.html    //先看一下惠新宸鳥哥yaf官網的配置說明

我們可以在php.ini中定義開發環節配置項,把本地開發設定成develop、測試環境配置成test、生產環境配置成product。程式碼如下,預設的是product

[yaf]
yaf.environ=develop

通過設定執行環境,在專案中可以通過ini_get(‘yaf.environ’)獲取環境引數。

yaf配置檔案一般都放在專案的conf資料夾下,yaf application例項化的時候需要傳遞一個配置檔案路徑,配置檔案叫application.ini,先看下application.ini的結構:

[common]
; 通用配置
 
[product : common]
; 生產環境配置
 
[test : common]
; 測試環境配置
 
[develop : common]
; 開發環境配置

配置例子如下程式碼

application.debug = TRUE
;當意外的錯誤發生的時候,開啟/關閉異常丟擲。 當開啟的時候,Yaf將會丟擲異常而不是觸發可捕捉的錯誤。
;1丟擲異常. 0獲取可以除錯的錯誤
application.dispatcher.throwException = 0
;開啟/關閉自動異常捕獲功能
;1 Yaf會將所有未捕獲的異常交給Error Controller的Error Action來處理. 0直接列印
application.dispatcher.catchException = 0
;如果 throwException = 0,那麼 catchException是什麼都無所謂了. 因為catchException是捕獲異常的.
;如果 throwException = 1, catchException的值決定異常處理方式.但catchException為1,必須定義Error Controller,否則還會報這個錯誤.
;
;redis.namespace = "TEST_"
;redis.servers.host = '127.0.0.1'
;redis.servers.port = '6379'
;redis.servers.password = ''
;redis.servers.weight = 1

Redis.namespace = "TEST_"
Redis.servers.host = '127.0.0.1'
Redis.servers.port = '6379'
Redis.servers.password = ''
Redis.servers.weight = 1


sessRedis.host = '127.0.0.1'
sessRedis.port = '6379'
sessRedis.timeout = 0.5
sessRedis.db = 9
sessRedis.auth = ''

DB_TYPE="mysql"
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_CHARSET="utf8"
DB_NAME="kmjd"
DB_USER="root"
DB_PWD="root"

配置除了節之外,節和節之間還有繼承關係。

例如[product : common]就表示product的配置會繼承common的配置。

yaf在例項化應用傳遞配置檔案路徑和執行環境:

define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../'));
$app = new \Yaf\Application(APPLICATION_PATH . "/conf/application.ini", ini_get('yaf.environ'));

這樣當專案執行環境在develop下的時候,會優先讀取[develop : common]內的配置,如果沒有則會從[common]中獲取。

\Yaf\Application::app()->getConfig();         //在專案中任何地方都可以通過次程式碼獲取application.ini中的配置。

事實上該例中可以不用傳遞ini_get(‘yaf.environ’)引數,在例項化的時候yaf會自行讀取php.ini中的yaf.environ引數。但如果是其它的配置檔案,則需要傳遞該引數。程式碼如下

$app  = new Yaf_Application(APP_PATH . "/conf/application.ini");

程式碼中獲取配置項的方法如下

$this->_config = Yaf_Application::app()->getConfig()->get("Redis");
$this->_host = $this->_config['servers']['host'];
$this->_port = $this->_config['servers']['port'];
$this->_db = $this->_config['servers']['db'];

當然,除了用yaf指定的application.ini配置之外,把所有的配置都歸結到一個檔案中,也可以分開配置,yaf中提供了\Yaf\Config\Ini類來處理這些額外的配置檔案。

$config = new \Yaf\Config\Ini(APPLICATION_PATH . '/conf/url.ini', ini_get('yaf.environ'));

在實際讀取的時候,最好能設定一個靜態變數儲存讀取到的配置,避免重複申請系統open函式呼叫。如下:

static $config = null;
if ($config === null) {
    $config = new \Yaf\Config\Ini(APPLICATION_PATH . '/conf/url.ini', ini_get('yaf.environ'));
}

詳細可以參考yaf擴充套件示例Bootstrap中的getUrlIniConfig方法。

 

相關文章