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

时间:2015-08-21 19:33:55

标签: php zend-framework2

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

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

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

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

return $config;

虽然这有效并且解决了问题,但我想知道是否有其他方法可以做到这一点。

这个用例是一个好方法吗?有没有更好的方法来实现这一目标?

谢谢!

1 个答案:

答案 0 :(得分:1)

我通常使用以下两种方法中的任何一种来做到这一点:

使用本地应用程序配置

有条件地加载模块

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;

application.config.local.php:

<?php

return [
    // Your config
];

这使您可以拥有基本应用程序配置并为每个部署加载其他配置。所以没有if $condition,这取决于您的部署过程,这在大多数情况下都更容易管理。

请注意,这也适用于部署配置:application.config.development.php vs application.config.production.php。这就是你喜欢的任何东西,以满足你的需求。

有条件地执行模块配置

中的代码

在你的Module.php中

<?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
        }
    }
}

然后你可以将module.config.php放在你自己的模块文件夹中:

<?php

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

但如果你不想在特定环境中禁用此功能,请将其添加到config/autoload/local.php

<?php

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