application.config.php中的可选ZF2模块。有更好的办法吗?

application.config.php中的可选ZF2模块。有更好的办法吗?,php,zend-framework2,Php,Zend Framework2,我需要在我的ZF2应用程序中选择性地包含一些模块。模块与任何加载的模块完全独立 在application.config.php中,在配置数组中,我可以只包含主要模块,然后在最后根据一些条件添加可选模块。像这样: $config = array( 'modules' => array( 'Application', ), ... ); if (condition) { $config['modules'][] = 'OptionalModul

我需要在我的ZF2应用程序中选择性地包含一些模块。模块与任何加载的模块完全独立

application.config.php
中,在配置数组中,我可以只包含主要模块,然后在最后根据一些条件添加可选模块。像这样:

$config = array(
    'modules' => array(
        'Application',
    ),
    ...
);

if (condition) {
    $config['modules'][] = 'OptionalModule';
}

return $config;
虽然这样做可以解决问题,但我想知道是否还有其他方法可以做到这一点

对于这个用例,这是一个好方法吗?有没有更好的方法来实现这一点


谢谢

我通常使用以下两种方法之一:

使用本地应用程序配置有条件地加载模块 application.config.php:

<?php
use Zend\Stdlib\ArrayUtils;

$config = [
    // You config
];

$local = __DIR__ . '/application.config.local.php';
if (is_readable($local)) {
    $config = ArrayUtils::merge($config, require($local));
}

return $config;
然后,您可以将module.config.php放在自己的模块文件夹中:

<?php

return [
    'mymodule' => [
        'enabled' => true,
    ],
];

有什么理由不包括它吗?您是否依赖于它的包含,或在应用程序逻辑中重用该
条件
,以决定它是否在以后使用?有一个主应用程序(带有预定义的模块)和一个附加应用程序。该条件实际上是检查文件系统上是否有其他文件,如果有,还包括模块。关键是,整个设置应该在有和没有插件的情况下都能工作。我没有一个好的答案给你,但是如果我理解正确,我建议不要在每次请求时都检查磁盘以做出决定,这可能会很昂贵。
<?php

namespace MyModule;

use Zend\Mvc\MvcEvent;

class Module
{
    public function onBootstrap(MvcEvent $e)
    {
        $app = $e->getApplication();
        $sm  = $app->getServiceManager();

        $config = $sm->get('Config');
        if ($config['mymodule']['enabled'] === true) {
            // condition
        }
    }
}
<?php

return [
    'mymodule' => [
        'enabled' => true,
    ],
];
<?php

return [
    'mymodule' => [
        'enabled' => false,
    ],
];