如何在 Zend Framework 2 应用程序中模块的 getConfig() 中使用 global.php/local.php 配置?

2023-11-29

在 ZF2 应用程序中,我有一些配置,即: 1. 需要根据环境而有所不同; 2. 特定于具体模块。我目前正在使用它here描述:

全局.php 和本地.php

return array(
    ...
    'modules' => array(
        'Cache' => array(
            'ttl' => 1, // 1 second
        )
    )
    ...
);

模块类

Module {
    ...
    public function getServiceConfig() {
        try {
            return array (
                'factories' => array(
                    'Zend\Cache\Adapter\MemcachedOptions' => function ($serviceManager) {
                        return new MemcachedOptions(array(
                            'ttl'           => $this->getConfig()['modules']['Cache']['ttl'],
                            ...
                        ));
                    },
                    ...
                )
            );
        }
        ...
    }
    ...
}

它工作正常,但我相信,应该通过模块中的一个中心位置访问模块特定设置 -getConfig()的方法Module班级。像这样:

class Module {

    public function getConfig() {
        $moduleConfig = include __DIR__ . '/config/module.config.php';
        $application = $this->getApplicationSomehow(); // <-- how?
        $applicationModuleConfig = $application->getConfig()['modules'][__NAMESPACE__];
        $config = array_merge($moduleConfig, $applicationModuleConfig);
        return $config;
    }
    ...
    public function getServiceConfig() {
        try {
            return array (
                'factories' => array(
                    'Zend\Cache\Adapter\MemcachedOptions' => function ($serviceManager) {
                        return new MemcachedOptions(array(
                            'ttl'            => $serviceManager->get('Config')['modules']['Cache']['ttl'],
                            ...
                        ));
                    },
                    ...
                )
            );
        }
        ...
    }
    ...
}

问题是,我不明白如何访问 global.php/local.php 配置getConfig()一个模块的。我该怎么做?


每个加载模块的每一个配置都将合并为一个配置。也就是说,这将是:

$serviceManager->get('config');

背后的原因(global|local).config.php仅用于使用目的。全局配置文件应该始终是deployed。然而,本地配置文件只能部署为可分发文件、别名local.config.php.dist.

无论分布在何处,都不会加载。然而,ZF2 的常见概念是将可分发文件复制到/config/autoload-ZF2 应用程序的目录并将其重命名为local.config.php

一个例子:

// YourModule/config/module.config.php
return array(
    'key' => 1337
);

// YourModule/config/local.yourmodule.php.dist
return array(
    'key' => 7331
);

现在,当您发布/部署应用程序时,仅module.config.php将会被使用。如果有人想更改您的模块的配置,他们会never touch module.config.php,因为当您的模块更新时,该文件会不断被覆盖。

然而人们可以做的是复制:

YourModule/config/local.yourmodule.php.dist
to
/config/autoload/local.yourmodule.php

并更改此本地配置中的配置值。

要理解:

  • 您应该始终针对实时场景尽可能地配置您的模块。
  • 如果您有特定于环境的需求,请使用本地配置覆盖此配置
  • 本地配置永远不会自动部署,这是需要从环境本身内部完成的手动任务

希望这能更清楚一点

最终:

  • 为实时场景配置模块
  • 在您的开发机器上创建一个/config/autoload/mymodule.local.php并覆盖你的ttl以及它的开发价值

加载顺序:

最后一个有趣的部分是配置文件的加载顺序,我已经完全忘记了。由于所有文件都已合并,因此请务必注意这一点!

  • 首先加载的是/config/application.config.php
  • 其次加载的是每个模块/modules/{module}/config/module.config.php *
  • 最后但并非最不重要的一点是,将加载可自动加载的文件/config/autoload/{filename}.php

asterix它实际上是NOT module.config.php这被称为,而是Module-类配置函数。主要有这些:

  • getConfig()
  • getServiceConfig()
  • getViewHelperConfig()
  • 最终一切都在Zend\ModuleManager\Feature\{feature}ProviderInterface

如果我明白的话这部分的ConfigListener正确的话,那么getConfig()将首先调用所有专门的{feature}ProviderInterfaces将覆盖的数据getConfig(),但不要认为这是理所当然的,它需要检查!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Zend Framework 2 应用程序中模块的 getConfig() 中使用 global.php/local.php 配置? 的相关文章

随机推荐