Как настроить application.config.php - PullRequest
       17

Как настроить application.config.php

0 голосов
/ 27 сентября 2018

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

Как добавить модулиКонфиг для моего приложения?Конфигурация двух приложений различна.

Спасибо,W.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Я бы посоветовал вам загрузить SkeletonApplication , настроенный для целей обучения.Это ясно иллюстрирует и объясняет различные значения по умолчанию в конфигурации.По умолчанию 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 здесь будет добавлено больше слов.

В единственном модуле Skeleton (Application) вы также найдете Module.php в папке src/.Здесь конфигурация модуля загружается из / by.

Здесь я бы порекомендовал вам начать немного отклоняться от настроек по умолчанию, создав собственный класс 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 и по-прежнему использовать этот класс.

0 голосов
/ 27 сентября 2018

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);
}
...