Я использую Zf2, каким-то образом клонированный zf3, application.config.php по-прежнему zf2, в котором настроены мои модули, но он вызвал исключение из-за невозможности найти маршрут из ServiceManager.
Как добавить конфигурацию модулей в мое приложение? Конфигурация двух приложений различна.
Спасибо,
W.






application.config.php должен описывать все модули, необходимые системе.
Например:
return [
'modules' => [
'Application',
'Module1',
'Module2',
],
'module_listener_options' => [
'config_glob_paths' => [
'config/autoload/{,*.}{global,local}.php'
],
'config_cache_enabled' => false,
'cache_dir' => 'data/cache',
'module_paths' => [
'./module',
'./vendor'
]
],
'service_manager' => [
'use_defaults' => true,
'factories' => []
]
];
Затем ZF будет читать каждый файл модуля Module.php и загружать соответствующие файлы конфигурации, используя метод getConfig().
По умолчанию:
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
Например, вы можете:
public function getConfig()
{
$user = include __DIR__ . '/config/user.config.php';
$group = include __DIR__ . '/config/group.config.php';
$account = include __DIR__ . '/config/module.config.php';
return array_merge_recursive($user, $group, $account);
}
Конфигурация приложения не использует формат, как после его нахождения: github.com/nginadofficial/nginad/blob/master/upload/confi g /… @michaelbn
Я предлагаю вам загрузить СкелетПрименение, который настроен для учебных целей. Он ясно иллюстрирует и объясняет различные значения по умолчанию в конфигурации. По умолчанию application.config.php здесь
В этой конфигурации по умолчанию вы найдете это:
// Retrieve list of modules used in this application.
'modules' => require __DIR__ . '/modules.config.php',
Таким образом, у вас есть отдельный modules.config.php рядом с application.config.php, чтобы разделить эти проблемы. По умолчанию это выглядит так:
<?php
/**
* @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
* @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
/**
* List of enabled modules for this application.
*
* This should be an array of module namespaces used in the application.
*/
return [
'Zend\Router',
'Zend\Validator',
'Application',
];
Хотя после запуска composer install сюда вроде бы добавится больше.
В единственном модуле скелета (Application) вы также найдете Module.php в папке src/. Это то место, откуда загружается конфигурация модуля.
Здесь я бы порекомендовал вам начать немного отклоняться от настройки по умолчанию, создав где-нибудь свой собственный класс AbstractModule в универсальном модуле (MVC?). Я рекомендую это, чтобы минимизировать количество дублированного кода, поскольку у большинства модулей не будет ничего, кроме простого «вот конфигурация, делай свое дело», как по умолчанию, ссылка на которое приведена выше.
Мои собственные классы Module.php выглядят так:
class Module extends AbstractModule
{
public function __construct()
{
parent::__construct(__DIR__, __NAMESPACE__);
}
}
А вот AbstractModule такой:
abstract class AbstractModule implements ConfigProviderInterface, AutoloaderProviderInterface
{
/**
* @var String Path of current module
*/
protected $path;
/**
* @var String Namespace of current module
*/
protected $namespace;
/**
* This is to be called by descendant classes with:
* parent::__construct(__DIR__, __NAMESPACE__)
*
* @param $path string Module path
* @param $namespace string Module namespace
*/
public function __construct($path, $namespace)
{
$this->path = $path;
$this->namespace = $namespace;
}
/**
* @return array
*/
public function getConfig()
{
$config = [];
$path = $this->path
. DIRECTORY_SEPARATOR . '..'
. DIRECTORY_SEPARATOR . 'config'
. DIRECTORY_SEPARATOR . '*.php';
foreach (glob($path) as $filename) {
$config = array_merge_recursive($config, include $filename);
}
return $config;
}
/**
* @return array
*/
public function getAutoloaderConfig()
{
return [
'Zend\Loader\StandardAutoloader' => [
'namespaces' => [
$this->namespace => $this->path . DIRECTORY_SEPARATOR . 'src',
],
],
];
}
}
Эта настройка по-прежнему позволит вам изменять Module.php определенного модуля, и он является универсальным таким образом, чтобы вам требовалось только, чтобы __construct функционировал для дочерних классов, если вам больше ничего не нужно.
Обратите внимание, что эта установка принимает любые файлы .php в папке config/. Таким образом, вы можете разработать свои собственные пакеты для включения в конфигурационные файлы .dist по умолчанию и по-прежнему использовать этот класс.
Можете ли вы поделиться своим "application.config.php", а также исключениями