我需要在我的ZF2应用程序中选择包含一些模块。这些模块完全独立于任何已加载的模块。
在application.config.php
中,在配置数组中我可以只包含主要模块,然后在最后根据某些条件添加可选模块。像这样:
$config = array(
'modules' => array(
'Application',
),
...
);
if (condition) {
$config['modules'][] = 'OptionalModule';
}
return $config;
虽然这有效并且解决了问题,但我想知道是否有其他方法可以做到这一点。
这个用例是一个好方法吗?有没有更好的方法来实现这一目标?
谢谢!
答案 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,
],
];