Конфигурационный файл
Местоположение
Конфигурационный файл 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',
];