[英]Get global config in Zend Framework 2
我的問題是以前問過的 。 我還想訪問位於我的個人庫(在供應商目錄中)的全局配置(config / {,*。} {global,local} .php)。 我認為找到的最接近的答案是在這里 。 我在課堂上創建了函數
public function getServiceConfig()
{
return array(
'factories' => array(
'funcservice' => function(\Zend\ServiceManager\ServiceLocatorInterface $sm) {
$config = $sm->get('config');
}
)
);
}
它有效,但是我不知道如何從結果中獲取任何東西。
$config = $this->getServiceConfig();
print_r($config);
給我
Array
(
[factories] => Array
(
[funcservice] => Closure Object
(
[this] => Tools\Model\StandartFuncs Object
(
[eventIdentifier:protected] => Zend\Mvc\Controller\AbstractActionController
[plugins:protected] =>
[request:protected] =>
[response:protected] =>
[event:protected] =>
[events:protected] =>
[serviceLocator:protected] =>
)
[parameter] => Array
(
[$sm] => <required>
)
)
)
)
並從$config = $this->getServiceConfig()->get('locales');
我懂了
致命錯誤:在非對象上調用成員函數get()
假設您有一個語言環境配置文件locales.local.php
:
<?php
return array(
'hostname' => 'http://apachehost'
);
這些全局和本地配置文件應位於config/autoload
文件夾中。
資料夾結構:
- root
- config
- autoload
- locales.global.php
- locales.local.php
- application.config.php
然后,使用application.config.php
的以下行加載它們。 您可以在ZF2文檔中閱讀有關此高級配置的詳細信息
'module_listener_options' => array(
'config_glob_paths' => array(
'config/autoload/{{,*.}global,{,*.}local}.php',
),
)
現在,您可以像這樣從ServiceManager
實例訪問配置:
$config = $serviceManager->get('Config');
$config
變量是一個數組。 因此,您無法使用吸氣劑訪問任何東西。 您應該使用數組符號:
$locales = $config['locales'];
如果您真的想使用吸氣劑,則必須對一個對象進行配置。 您可以使用Zend\\Config\\Config
類執行以下操作:
$config = new \Zend\Config\Config($config, false);
現在,您可以像在問題中寫道的那樣進行訪問:
$config->get('locales');
如果要從供應商模塊加載自動配置文件,通常的做法是將模塊隨附的*.local.php
和/或*.global.php
文件復制到autoload文件夾中,然后根據您的需求編輯復制的文件需要。
我認為您不太了解要實施的解決方案。 您要添加到服務配置中的工廠需要返回庫類的實例。 將其放入工廠的原因是可以將配置數組注入其中。 因此,您的代碼應更像這樣:
public function getServiceConfig()
{
return array(
'factories' => array(
'funcservice' => function(\Zend\ServiceManager\ServiceLocatorInterface $sm) {
$config = $sm->get('config');
return new \SomeLibrary($config);
}
)
);
}
(其中SomeLibrary
是/vendor
中您的庫類的名稱)。
然后,您需要在需要訪問它時(例如在控制器中)使用服務管理器實例化您的庫類:
public function someAction()
{
$yourLibrary = $this->getServiceLocator()->get('funcservice');
}
這將創建您的庫類的實例,將config數組作為構造函數傳遞給第一個參數。 您永遠不需要自己調用getServiceConfig()
,這不會實現任何目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.