我遇到了一个问题,其中我的本地配置覆盖全局,但我需要本地删除而不只是覆盖。

例如

// global.php
'mail_transport' => [
    'type' => 'Zend\Mail\Transport\Smtp',
    'options' => [
        'host' => 'smtp.gmail.com',
        'port' => 587,
        'connectionClass' => 'login',
        'connectionConfig' => [
            // ...
        ],
    ],
], // ...

// local.php
'mail_transport' => [
    'type' => 'Zend\Mail\Transport\File',
    'options' => [
        'path' => 'data/mail/',
    ]
],
// ...

因此, mail_transport被覆盖,但是它的选项hostportconnectionClass仍然保留,并破坏了邮件传输工厂。 有什么我可以覆盖的方法吗? 还是直接编辑global.php的唯一方法?

===============>>#1 票数:1 已采纳

您可以在事件Zend\\ModuleManager\\ModuleEvent::EVENT_MERGE_CONFIG上添加一个侦听器,以删除所需的选项

在合并所有配置之后,但在将其传递给ServiceManager之前, Zend\\ModuleManager\\Listener\\ConfigListener会触发一个特殊事件Zend\\ModuleManager\\ModuleEvent::EVENT_MERGE_CONFIG 通过侦听此事件,您可以检查合并的配置并进行操作。

这样的听众可能看起来像这样。

use Zend\ModuleManager\ModuleEvent;
use Zend\ModuleManager\ModuleManager;
use Zend\ModuleManager\Feature\InitProviderInterface;

class Module implements InitProviderInterface
{
    public function init(ModuleManager $moduleManager)
    {
        $events = $moduleManager->getEventManager();
        $events->attach(ModuleEvent::EVENT_MERGE_CONFIG, [$this, 'removeMailOptions']);
    }

    public function removeMailOptions(ModuleEvent $event)
    {
        $listener = $event->getConfigListener();
        $config = $listener->getMergedConfig(false);

        if (isset($config['mail_transport']['type'])) {
            switch($config['mail_transport']['type']) {
                case \Zend\Mail\Transport\File::class :
                    $config['mail_transport']['options'] = [
                        'path' => $config['mail_transport']['options']['path']
                    ];
                break;
            }
        }
        $listener->setMergedConfig($config);
    }
}

  ask by Derek Illchuk translate from so

未解决问题?本站智能推荐:

4回复

ZF2为整个应用程序设置全局功能

对于我的应用程序,我编写了一个函数,该函数将字符串转换为SEO证明段/ URL。 我在不同的模块中使用该函数,但现在我在控制器或数据库模型中一遍又一遍地定义函数。 我想知道如何仅设置一次此功能并在整个应用程序中使用它(以正确的方式)。 谢谢! :)
1回复

使用zend全局配置的许多模块中使用的ZF2模型

我在zend结构的许多模块中都有一个Class对象: 因此,我的想法是在其他模块中使用此MyObjectClass.php,以便避免重复并拥有自己的配置。 到目前为止,这是可以的,但是我想从此类中注入的config / autoload文件中获取变量集,但我不知道如何。 如何将该
1回复

ZF2:添加全局变量以进行查看

我正在尝试学习ZF2,并且需要了解一些基本知识。 我要做的是定义所有模板中都可用的某些变量。 我有一个IndexController扩展BaseController,并在BaseController中尝试了此操作: 当然,这是ZF1方法,不起作用。 那么我该怎么做呢? 如有任何提
1回复

ZF2访问路由器配置中的配置

我按主机名路由,我想通过zf2中config / autoload中的zf2配置文件获取我的域名 我知道如何在控制器中获取配置,但是我不知道如何在路由器配置文件中获取配置 我在代码中评论我想要的
1回复

覆盖ZF2中的标准转换功能

我可以覆盖ZF2中的标准translate功能,包括表格翻译吗? 在当前状态下,我仅使用视图助手通过自己替换$this->translate()方法来完成此操作,因此如何在全局范围内(使用表单生成器(标签,选择值等)及其他方法)进行相同操作? 感谢您的回答。
1回复

访问ZF2应用程序的基本配置

我有一个ZF2应用程序的基本配置,它在我的ZF2应用程序的以下结构中: 当我需要来自我的vhosts配置的东西时,我只需这样做: 我的问题是,当我找到我的虚拟主机(www.sitename1.com)时。 我想在我的vhost中访问基本配置,我该怎么办?
1回复

ZF2中的“纯配置”是什么意思?

我正在ZF2中进行表单创建,并且阅读了以下声明。 “您可以使用Factory创建整个表单,并输入过滤器。如果要将表单存储为纯配置 ,这特别好;您只需将配置传递给工厂即可完成。” 谁能详细说明PURE CONFIGURATION是什么意思?
2回复

zf2设置导航栏的方法

我正在努力在引导程序中初始化事物的ZF1方法和从配置文件中注入事物的ZF2方法之间连接点(似乎)。 智慧地说,在ZF1中,我的boostrap中有这样的内容: 在ZF2中,我什至不确定要开始寻找什么来完成类似的任务。 我已经阅读了有关以下内容的帖子: 以及您可以执行以
1回复

设置页面标题-headTitle()-Zend Framework 2 ZF2

我目前正在使用ZF2构建应用程序,到目前为止一切进展顺利,但是页面标题(如<head>的<title>标记)遇到了麻烦。 在我的layout.phtml我使用$this->headTitle()静态设置了一个字符串。 我希望它基本上在默认情况下包括模块,
1回复

如何在zf2中设置多个环境

所以因为我在.htaccess使用了这个 而且比我config's文件 但是现在情况变得越来越糟,因为存在多种环境: 发展历程 测试中 生产 服务器1 服务器2 每种环境都有不同的database settings和其他设置,因此