Конфигурирование модулей сервиса
Быстрый старт
Приведенные ниже примеры демонстрируют, как настроить интеграционный модуль, а также модули, образующие сервис, таким образом, чтобы настройки интеграционного модуля автоматически были применены к аналогичным настройкам модуля сервиса.
Подключить модуль Nnx\Module, в конфигурационном файле приложения. Важно: модуль Nnx\Module должен быть подключен до модулей сервисов.
Пример (файл application.config.php):
use Nnx\Module\PhpUnit\TestData\IntegrationModule\Service;
use Nnx\Module\PhpUnit\TestData\IntegrationModule\Custom\Service as CustomService;
return [
'modules' => [
'Nnx\\Module',
Service\Module1\Module::MODULE_NAME,
Service\Module2\Module::MODULE_NAME,
Service\Module3\Module::MODULE_NAME,
Service\Service\Module::MODULE_NAME,
CustomService\Module1\Module::MODULE_NAME,
CustomService\Module2\Module::MODULE_NAME,
CustomService\Module3\Module::MODULE_NAME,
CustomService\Service\Module::MODULE_NAME,
],
'module_listener_options' => [
'config_glob_paths' => [
__DIR__ . '/config/autoload/{{,*.}global,{,*.}local}.php',
],
]
];
Для интеграционного модуля добавить интерфейсы:
- \Nnx\Module\IntegrationModuleInterface:
- метод getServiceModules возвращает массив имен модулей сервиса.
- \Nnx\Module\CommonModuleOptionsInterface:
- метод getCommonModuleOptions возвращает список общих настроек модулей сервиса (массив ключей конфигурации), которые будут установлены из интеграционного модуля. Всем модулям сервиса в конфиге будут установлены данные по этими ключами из конфигурационного массива интеграционного модуля.
Для интеграционного модуля добавить трейт: \Nnx\Module\IntegrationModuleTrait.
Пример интеграционного модуля:
/**
* @link https://github.com/nnx-framework/module
* @author Malofeykin Andrey <and-rey2@yandex.ru>
*/
namespace Nnx\Module\PhpUnit\TestData\IntegrationModule\Custom\Service\Service;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Zend\EventManager\EventManagerAwareTrait;
use Nnx\ModuleOptions\ModuleConfigKeyProviderInterface;
use Nnx\Module\IntegrationModuleTrait;
use Nnx\Module\IntegrationModuleInterface;
use Nnx\Module\PhpUnit\TestData\IntegrationModule\Custom\Service as CustomService;
use Nnx\Module\CommonModuleOptionsInterface;
use Nnx\Module\PhpUnit\TestData\IntegrationModule\Service\Service\Module as Service;
/**
* Class Module
*
* @package Nnx\Module\PhpUnit\TestData\IntegrationModule\Custom\Service\Service
*/
class Module implements
AutoloaderProviderInterface,
ConfigProviderInterface,
ModuleConfigKeyProviderInterface,
IntegrationModuleInterface,
CommonModuleOptionsInterface
{
use IntegrationModuleTrait, EventManagerAwareTrait;
/**
* Имя секции в конфиги приложения отвечающей за настройки модуля
*
* @var string
*/
const CONFIG_KEY = 'custom_service_service';
/**
* Имя модуля
*
* @var string
*/
const MODULE_NAME = __NAMESPACE__;
/**
* @inheritdoc
*
* @return array
*/
public function getServiceModules()
{
return [
Service::MODULE_NAME,
CustomService\Module1\Module::MODULE_NAME,
CustomService\Module2\Module::MODULE_NAME,
CustomService\Module3\Module::MODULE_NAME,
];
}
/**
* @inheritdoc
*
* @return array
*/
public function getCommonModuleOptions()
{
return [
'test_token'
];
}
/**
* @return string
*/
public function getModuleConfigKey()
{
return static::CONFIG_KEY;
}
/**
* @return array
*/
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/',
),
),
);
}
/**
* @inheritdoc
*
* @return array
*/
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
}
Убедиться, что каждый модуль сервиса реализует интерфейс \Nnx\ModuleOptions\ModuleConfigKeyProviderInterface. Метод getModuleConfigKey данного интерфейса должен возвращать ключ, по которому из конфига приложения можно получить настройки для модуля.
Пример файла модуля, входящего в сервис:
/**
* @link https://github.com/nnx-framework/module
* @author Malofeykin Andrey <and-rey2@yandex.ru>
*/
namespace Nnx\Module\PhpUnit\TestData\IntegrationModule\Custom\Service\Module3;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Nnx\ModuleOptions\ModuleConfigKeyProviderInterface;
/**
* Class Module
*
* @package Nnx\Module\PhpUnit\TestData\IntegrationModule\Custom\Service\Module3
*/
class Module implements
AutoloaderProviderInterface,
ConfigProviderInterface,
ModuleConfigKeyProviderInterface
{
/**
* Имя секции в конфиге приложения, отвечающей за настройки модуля
*
* @var string
*/
const CONFIG_KEY = 'custom_service_module_3';
/**
* Имя модуля
*
* @var string
*/
const MODULE_NAME = __NAMESPACE__;
/**
* @return string
*/
public function getModuleConfigKey()
{
return static::CONFIG_KEY;
}
/**
* @return array
*/
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/',
),
),
);
}
/**
* @inheritdoc
*
* @return array
*/
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
}