簡體   English   中英

在Zend Framework 2中獲取全局配置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM