2015-03-02 23 views
0

當我寫:獲取包配置文件作爲一個數組

$config->get('database'); 

...我得到的app/config/database.php的全部內容。如何對屬於包的配置文件做同樣的事情?

(內容app/config/packages/vendor/package/somefile.php)。

注:我正在使用CLI環境手動加載框架。

// composer (Laravel) bootstrap 
require_once 'bootstrap/autoload.php'; 

/* @var $app \Illuminate\Foundation\Application */ 
$app = require_once 'bootstrap/start.php'; 

$config = $app->make('config'); 

print_r($config->get('my-package::config')); 
+0

你可能要考慮創建一個工匠命令並從命令行執行它。這樣,您的邏輯將在完全配置的Laravel應用程序中運行。 – patricus 2015-03-02 20:08:22

+0

@patricus謝謝,但不幸的是這不可能。我沒有直接執行我的文件,它作爲其他工具的一部分運行。 – vbence 2015-03-03 07:39:48

回答

1

在Laravel 4包配置被訪問由它的包命名空間。這通常是包的名稱本身:

$config->get('package::somefile'); 

由於明顯的配置命名空間也不是沒有做$app->run()你可以手動加載配置文件訪問。這不是最漂亮的解決方案,但會做的工作:通過運行

$packageConfig = require app_path('config/packages/vendor/package/somefile.php'); 
+0

它適用於現場,但不適用於CLI模式。請參閱我對該問題所做的修改。 – vbence 2015-03-02 15:45:53

+0

嗯。我不知道爲什麼會這樣。 CLI環境是否使用與現場完全相同的應用程序文件? – lukasgeiter 2015-03-02 15:52:04

+0

是的。一切都是一樣的。如果我執行'$ app-> run()'(正是index.php所做的),那麼之後就可以訪問該配置了。這樣做的問題是,run()會執行許多其他操作(如嘗試寫入日誌並因權限而失敗)。 – vbence 2015-03-02 19:57:56

0

可以初始化框架(至少是有趣的部分):

$app->boot(); 

這一步配置庫正確的後初始化。因此,要建立一個最小的CLI環境(但不運行的應用程序)的正確方法是:

// composer (Laravel) bootstrap 
require_once 'bootstrap/autoload.php'; 

/* @var $app \Illuminate\Foundation\Application */ 
$app = require_once 'bootstrap/start.php'; 
$app->boot(); 

後該程序包配置文件是通過正常途徑訪問:

$config = $app->make('config'); 

print_r($config->get('my-package::config'));