Конфигурационный файл

Местоположение

Конфигурационный файл webman находится в директории config/, и его можно получить с помощью функции config().

Получение конфигурации

Получить всю конфигурацию

config();

Получить всю конфигурацию из config/app.php

config('app');

Получить конфигурацию debug из config/app.php

config('app.debug');

Если конфигурация является массивом, можно получить значение внутренних элементов массива с помощью .. Например

config('file.key1.key2');

Значение по умолчанию

config($key, $default);

Функция config принимает второй параметр для передачи значения по умолчанию, если конфигурация не существует, то возвращается значение по умолчанию.
Если конфигурация не существует и значение по умолчанию не установлено, возвращается null.

Пользовательская конфигурация

Разработчики могут добавлять собственные конфигурационные файлы в директорию config/, например

config/payment.php

<?php
return [
    'key' => '...',
    'secret' => '...'
];

Использование при получении конфигурации

config('payment');
config('payment.key');
config('payment.key');

Изменение конфигурации

Webman не поддерживает динамическое изменение конфигурации, все конфигурации должны быть вручную изменены в соответствующих конфигурационных файлах, после чего нужно выполнить reload или restart для перезапуска.

Внимание
Конфигурация сервера config/server.php и конфигурация процессов config/process.php не поддерживают reload, требуется restart для применения изменений.

Особое напоминание

Если вы хотите создать конфигурационный файл и считать его в подкаталоге config, например: config/order/status.php, то в директории config/order должен быть файл app.php со следующим содержимым

<?php
return [
    'enable' => true,
];

enable равный true означает, что фреймворк будет считывать конфигурацию из этого каталога.
Итоговая структура файловой системы для конфигурационных файлов будет похожа на следующую

├── config
│   ├── order
│   │   ├── app.php
│   │   └── status.php

Теперь вы можете получить данные массива или конкретные ключи из status.php с помощью config.order.status.

Объяснение конфигурационного файла

server.php

return [
    'listen' => 'http://0.0.0.0:8787', // Порт прослушивания (начиная с версии 1.6.0, убрано, следует настраивать в config/process.php)
    'transport' => 'tcp', // Протокол транспортного уровня (начиная с версии 1.6.0, убрано, следует настраивать в config/process.php)
    'context' => [], // SSL и другие настройки (начиная с версии 1.6.0, убрано, следует настраивать в config/process.php)
    'name' => 'webman', // Имя процесса (начиная с версии 1.6.0, убрано, следует настраивать в config/process.php)
    'count' => cpu_count() * 4, // Количество процессов (начиная с версии 1.6.0, убрано, следует настраивать в config/process.php)
    'user' => '', // Пользователь (начиная с версии 1.6.0, убрано, следует настраивать в config/process.php)
    'group' => '', // Группа пользователей (начиная с версии 1.6.0, убрано, следует настраивать в config/process.php)
    'reusePort' => false, // Включить ли повторное использование порта (начиная с версии 1.6.0, убрано, следует настраивать в config/process.php)
    'event_loop' => '',  // Класс цикла событий, по умолчанию выбирается автоматически
    'stop_timeout' => 2, // Максимальное время ожидания завершения обработки при получении сигналов stop/restart/reload, превышение этого времени приведет к принудительному завершению процесса
    'pid_file' => runtime_path() . '/webman.pid', // Место хранения файла pid
    'status_file' => runtime_path() . '/webman.status', // Место хранения файла status
    'stdout_file' => runtime_path() . '/logs/stdout.log', // Путь к стандартному выводу, все выводы после запуска webman будут записываться в этот файл
    'log_file' => runtime_path() . '/logs/workerman.log', // Путь к файлу журнала workerman
    'max_package_size' => 10 * 1024 * 1024 // Максимальный размер пакета данных, 10M. Размер загружаемых файлов ограничивается этим значением
];

app.php

return [
    'debug' => true,  // Включает ли режим отладки, при включении ошибки на странице будут выводить стек вызовов и другую отладочную информацию, для безопасности в производственной среде нужно отключить отладку
    'error_reporting' => E_ALL, // Уровень отчетности об ошибках
    'default_timezone' => 'Asia/Shanghai', // Часовой пояс по умолчанию
    'public_path' => base_path() . DIRECTORY_SEPARATOR . 'public', // Путь к публичной директории
    'runtime_path' => base_path(false) . DIRECTORY_SEPARATOR . 'runtime', // Путь к директории времени выполнения
    'controller_suffix' => 'Controller', // Суффикс контроллеров
    'controller_reuse' => false, // Использовать ли повторно контроллеры
];

process.php

use support\Log;
use support\Request;
use app\process\Http;
global $argv;

return [
     // Конфигурация процессов webman
    'webman' => [ 
        'handler' => Http::class, // Класс обработчика процесса
        'listen' => 'http://0.0.0.0:8787', // Адрес прослушивания
        'count' => cpu_count() * 4, // Количество процессов, по умолчанию в 4 раза больше количества CPU
        'user' => '', // Пользователь, под которым будет выполняться процесс, должен использоваться для низкоуровневого пользователя
        'group' => '', // Группа пользователей, под которой будет выполняться процесс, должна использоваться для низкоуровневой группы пользователей
        'reusePort' => false, // Включить ли повторное использование порта, при включении соединения будут равномерно распределяться по различным рабочим процессам
        'eventLoop' => '', // Класс цикла событий, если пусто, используется настройка server.event_loop 
        'context' => [], // Контекст прослушивания, например, ssl
        'constructor' => [ // Параметры конструктора класса обработчика процесса, в данном примере это параметры конструктора класса Http
            'requestClass' => Request::class, // Можете определить свой собственный класс запроса
            'logger' => Log::channel('default'), // Экземпляр журнала
            'appPath' => app_path(), // Путь к директории приложения
            'publicPath' => public_path() // Путь к публичной директории
        ]
    ],
    // Мониторинг процессов, используется для обнаружения обновлений файлов и автоматической загрузки, а также для контроля утечек памяти
    'monitor' => [
        'handler' => app\process\Monitor::class, // Обработчик
        'reloadable' => false, // Текущий процесс не выполняет reload
        'constructor' => [ // Параметры конструктора класса обработчика процесса
            // МонITORируемая директория, не нужно слишком много, это может замедлить проверку
            'monitorDir' => array_merge([
                app_path(),
                config_path(),
                base_path() . '/process',
                base_path() . '/support',
                base_path() . '/resource',
                base_path() . '/.env',
            ], glob(base_path() . '/plugin/*/app'), glob(base_path() . '/plugin/*/config'), glob(base_path() . '/plugin/*/api')),
            // Следить за обновлениями файлов с этими расширениями
            'monitorExtensions' => [
                'php', 'html', 'htm', 'env'
            ],
            // Другие опции
            'options' => [
                // Включить ли мониторинг файлов, действует только под linux, по умолчанию в режиме демона не включается мониторинг файлов
                'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
                // Включить ли мониторинг памяти, поддерживается только под linux
                'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
            ]
        ]
    ]
];

container.php

// Возвращает экземпляр контейнера для внедрения зависимостей psr-11
return new Webman\Container;

dependence.php

// Для настройки сервисов и зависимостей в контейнере внедрения зависимостей
return [];

route.php


use support\Route;
// Определите маршрут для пути /test
Route::any('/test', function (Request $request) {
    return response('test');
});

view.php

use support\view\Raw;
use support\view\Twig;
use support\view\Blade;
use support\view\ThinkPHP;

return [
    'handler' => Raw::class // Класс обработки представлений по умолчанию 
];

autoload.php

// Конфигурация автозагрузки файлов фрейма
return [
    'files' => [
        base_path() . '/app/functions.php',
        base_path() . '/support/Request.php',
        base_path() . '/support/Response.php',
    ]
];

cache.php

// Конфигурация кеша
return [
    'default' => 'file', // Файл по умолчанию
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => runtime_path('cache') // Место хранения файлов кеша
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default' // Название соединения redis, соответствует настройкам в redis.php
        ],
        'array' => [
            'driver' => 'array' // Кеш в памяти, будет недоступен после перезапуска
        ]
    ]
];

redis.php

return [
    'default' => [
        'host' => '127.0.0.1',
        'password' => null,
        'port' => 6379,
        'database' => 0,
    ],
];

database.php

return [
 // База данных по умолчанию
 'default' => 'mysql',
 // Различные конфигурации баз данных
 'connections' => [

     'mysql' => [
         'driver'      => 'mysql',
         'host'        => '127.0.0.1',
         'port'        => 3306,
         'database'    => 'webman',
         'username'    => 'webman',
         'password'    => '',
         'unix_socket' => '',
         'charset'     => 'utf8',
         'collation'   => 'utf8_unicode_ci',
         'prefix'      => '',
         'strict'      => true,
         'engine'      => null,
     ],

     'sqlite' => [
         'driver'   => 'sqlite',
         'database' => '',
         'prefix'   => '',
     ],

     'pgsql' => [
         'driver'   => 'pgsql',
         'host'     => '127.0.0.1',
         'port'     => 5432,
         'database' => 'webman',
         'username' => 'webman',
         'password' => '',
         'charset'  => 'utf8',
         'prefix'   => '',
         'schema'   => 'public',
         'sslmode'  => 'prefer',
     ],

     'sqlsrv' => [
         'driver'   => 'sqlsrv',
         'host'     => 'localhost',
         'port'     => 1433,
         'database' => 'webman',
         'username' => 'webman',
         'password' => '',
         'charset'  => 'utf8',
         'prefix'   => '',
     ],
 ],
];

exception.php

return [
    // Установите класс обработки исключений 
    '' => support\exception\Handler::class,
];

log.php

return [
    'default' => [
        'handlers' => [
            [
                'class' => Monolog\Handler\RotatingFileHandler::class, // Обработчик
                'constructor' => [
                    runtime_path() . '/logs/webman.log', // Имя журнала
                    7, //$maxFiles // Хранить журналы за последние 7 дней
                    Monolog\Logger::DEBUG, // Уровень журнала
                ],
                'formatter' => [
                    'class' => Monolog\Formatter\LineFormatter::class, // Форматировщик
                    'constructor' => [null, 'Y-m-d H:i:s', true], // Параметры форматирования
                ],
            ]
        ],
    ],
];

session.php

return [
     // Тип
    'type' => 'file', // или redis или redis_cluster
     // Обработчик
    'handler' => FileSessionHandler::class,
     // Конфигурация
    'config' => [
        'file' => [
            'save_path' => runtime_path() . '/sessions', // Директория для хранения
        ],
        'redis' => [
            'host' => '127.0.0.1',
            'port' => 6379,
            'auth' => '',
            'timeout' => 2,
            'database' => '',
            'prefix' => 'redis_session_',
        ],
        'redis_cluster' => [
            'host' => ['127.0.0.1:7000', '127.0.0.1:7001', '127.0.0.1:7001'],
            'timeout' => 2,
            'auth' => '',
            'prefix' => 'redis_session_',
        ]
    ],
    'session_name' => 'PHPSID', // Имя сессии
    'auto_update_timestamp' => false, // Автоматически обновлять временную метку, чтобы избежать истечения срока действия сессии
    'lifetime' => 7*24*60*60, // Время жизни
    'cookie_lifetime' => 365*24*60*60, // Время жизни cookie
    'cookie_path' => '/', // Путь cookie
    'domain' => '', // Домен cookie
    'http_only' => true, // Доступ только через http
    'secure' => false, // Доступ только через https
    'same_site' => '', // Свойство SameSite
    'gc_probability' => [1, 1000], // Вероятность очистки сессии
];

middleware.php

// Установите middleware
return [];

static.php

return [
    'enable' => true, // Включить ли доступ к статическим файлам webman
    'middleware' => [ // Middleware для статических файлов, может использоваться для настройки кеширования, кросс-доменных и т. д.
        //app\middleware\StaticFile::class,
    ],
];

translation.php

return [
    // Язык по умолчанию
    'locale' => 'zh_CN',
    // Язык для резервного копирования
    'fallback_locale' => ['zh_CN', 'en'],
    // Место хранения языковых файлов
    'path' => base_path() . '/resource/translations',
];