2012-06-08 92 views
0

我在我的codeigniter項目中加載了google-api-php-client庫(用於oauth 2.0使用)。我希望在配置文件中定義一系列配置值,以便它們可以與此庫一起使用。但是,我注意到庫的配置信息在我定義的配置文件之前加載。在代碼點火器的庫之前加載配置文件

例如,在autoload.php,我已經設置了配置自動加載如下:

$autoload['config'] = array('my_config_file'); 

my_config_file.php我有一系列的define語句來設置配置值:

define('GOOGLE_OAUTH_APPLICATION_NAME','My Application Name'); 
define('GOOGLE_OAUTH_CLIENT_ID','My App Client ID'); 
define('GOOGLE_OAUTH_CLIENT_SECRET','My App Client Secret'); 

我會喜歡在配置中使用這些google-api-php-client庫:

global $apiConfig; 
$apiConfig = array(
    'application_name' => GOOGLE_OAUTH_APPLICATION_NAME, 
    'oauth2_client_id' => GOOGLE_OAUTH_CLIENT_ID, 
    'oauth2_client_secret' => GOOGLE_OAUTH_CLIENT_SECRET 
); 

完成此操作(以及一些調試)之後,我確定該庫的配置文件在自動加載配置文件之前執行。加載庫配置之前(從而解決這個問題),這些全球配置常量的定義

Notice: Use of undefined constant GOOGLE_OAUTH_APPLICATION_NAME ... 
Notice: Use of undefined constant GOOGLE_OAUTH_CLIENT_ID ... 
Notice: Use of undefined constant GOOGLE_OAUTH_CLIENT_SECRET ... 

我如何得到它,以便:這是由錯誤,我得到進一步表示?

+1

是不是有沒有使用標準codeigniter配置文件的原因?如果你真的想爲你的google api庫有一個專門的配置文件,我會直接從該庫中包含它,而不是使用自動加載。 –

回答

1

最佳做法是爲庫創建單獨的配置文件;說application/config/oauth.php

該配置文件被加載到您的庫的構造函數中$this->config->load('oauth');。當然,你也可以將它包含在自動載入數組中。

在您的圖書館,你再打電話正是如此的配置項:

$apiConfig = array(
    'application_name' => $this->config->item('google_oauth_application_name', 'oauth'), 
    'oauth2_client_id' => $this->config->item('oauth2_client_id', 'oauth'), 
    'oauth2_client_secret' => $this->config->item('oauth2_client_secret', 'oauth') 
); 

乾杯。

+0

與此相關的問題是,我想爲整個應用程序配置一個文件,以便設置它的一個新實例只需要更改一個文件(我們計劃開源代碼和應用程​​序,因此oauth信息可能會更改從一個實例到另一個實例)。 這是一個普遍的壞主意?或者是否可行的做法並不是真正的'哈克'? – paradox870

+0

你可以肯定有一個配置文件,但它應該存在於CI範圍內 - 從長遠來看,這會讓事情變得更容易。如果可以,避免「定義」事物。如果您正在發佈應用程序,請保留敏感信息並使用佔位符創建一個'config.sample.php'。 – Seabass

+0

所以我決定採用這個解決方案,但我還有一些問題。 因爲配置值經常在其他地方使用,我希望它們自動加載。我可以在autoload.php中做到這一點。我遇到的問題是我不希望它們成爲大量CI_Config對象的一部分。 我希望它們被加載到運行'$ this-> config-> load('oauth',TRUE)'會加載它們。這樣我就可以使用一個鉤子,並且只用這個配置文件中的值來預設一個受保護的控制器變量控制器。 這可能沒有黑客核心文件,如果是這樣,如何? – paradox870