Archivo de Configuración
Ubicación
El archivo de configuración de Webman se encuentra en el directorio config/
, y se puede acceder a la configuración correspondiente en el proyecto utilizando la función config()
.
Obtener Configuración
Obtener toda la configuración
config();
Obtener toda la configuración en config/app.php
config('app');
Obtener la configuración debug
en config/app.php
config('app.debug');
Si la configuración es un array, se puede acceder al valor interno del array usando .
, por ejemplo
config('file.key1.key2');
Valor por Defecto
config($key, $default);
La función config recibe un segundo parámetro para el valor por defecto. Si la configuración no existe, se devuelve el valor por defecto. Si la configuración no existe y no se ha establecido un valor por defecto, se devuelve null.
Configuración Personalizada
Los desarrolladores pueden añadir sus propios archivos de configuración en el directorio config/
, por ejemplo
config/payment.php
<?php
return [
'key' => '...',
'secret' => '...'
];
Uso al Obtener Configuración
config('payment');
config('payment.key');
config('payment.key');
Cambiar Configuración
Webman no soporta la modificación dinámica de la configuración. Todas las configuraciones deben ser modificadas manualmente en el archivo de configuración correspondiente, y hay que realizar un reload o restart para reiniciar.
Nota
La configuración del servidor enconfig/server.php
y la configuración de los procesos enconfig/process.php
no soportan reload, es necesario hacer un restart para que se efectúe.
Recordatorio Especial
Si deseas crear un archivo de configuración y leerlo en un subdirectorio de config, por ejemplo: config/order/status.php
, entonces el directorio config/order
debe tener un archivo app.php
con el siguiente contenido
<?php
return [
'enable' => true,
];
enable
siendo true
indica a la framework que lea la configuración de este directorio.
La estructura del árbol del directorio de configuración final sería similar a la siguiente
├── config
│ ├── order
│ │ ├── app.php
│ │ └── status.php
Ahora puedes acceder a status.php
y leer el array devuelto o datos de una clave específica a través de config.order.status
.
Explicación de Archivos de Configuración
server.php
return [
'listen' => 'http://0.0.0.0:8787', // Puerto de escucha (eliminado a partir de la versión 1.6.0, ahora se configura en config/process.php)
'transport' => 'tcp', // Protocolo de capa de transporte (eliminado a partir de la versión 1.6.0, ahora se configura en config/process.php)
'context' => [], // Configuraciones como ssl (eliminado a partir de la versión 1.6.0, ahora se configura en config/process.php)
'name' => 'webman', // Nombre del proceso (eliminado a partir de la versión 1.6.0, ahora se configura en config/process.php)
'count' => cpu_count() * 4, // Número de procesos (eliminado a partir de la versión 1.6.0, ahora se configura en config/process.php)
'user' => '', // Usuario (eliminado a partir de la versión 1.6.0, ahora se configura en config/process.php)
'group' => '', // Grupo de usuario (eliminado a partir de la versión 1.6.0, ahora se configura en config/process.php)
'reusePort' => false, // Si se habilita la reutilización del puerto (eliminado a partir de la versión 1.6.0, ahora se configura en config/process.php)
'event_loop' => '', // Clase del bucle de eventos, se selecciona automáticamente por defecto
'stop_timeout' => 2, // Tiempo máximo de espera para completar el procesamiento al recibir señales de stop/restart/reload, si se supera este tiempo y el proceso no ha salido, se forzará la salida
'pid_file' => runtime_path() . '/webman.pid', // Ubicación de almacenamiento del archivo pid
'status_file' => runtime_path() . '/webman.status', // Ubicación de almacenamiento del archivo de estado
'stdout_file' => runtime_path() . '/logs/stdout.log', // Ubicación del archivo de salida estándar, toda la salida después de iniciar webman se escribirá en este archivo
'log_file' => runtime_path() . '/logs/workerman.log', // Ubicación del archivo de log de workerman
'max_package_size' => 10 * 1024 * 1024 // Tamaño máximo del paquete de datos, 10M. El tamaño de los archivos que se suben está limitado por esto
];
app.php
return [
'debug' => true, // Si se habilita el modo debug, al habilitarlo, los errores de página mostrarán la pila de llamadas y otra información de depuración. Para un entorno de producción seguro, se debe desactivar el debug
'error_reporting' => E_ALL, // Nivel de reporte de errores
'default_timezone' => 'Asia/Shanghai', // Zona horaria por defecto
'public_path' => base_path() . DIRECTORY_SEPARATOR . 'public', // Ubicación del directorio public
'runtime_path' => base_path(false) . DIRECTORY_SEPARATOR . 'runtime', // Ubicación del directorio runtime
'controller_suffix' => 'Controller', // Sufijo del controlador
'controller_reuse' => false, // Si se reutilizan los controladores
];
process.php
use support\Log;
use support\Request;
use app\process\Http;
global $argv;
return [
// Configuración del proceso webman
'webman' => [
'handler' => Http::class, // Clase de manejo del proceso
'listen' => 'http://0.0.0.0:8787', // Dirección de escucha
'count' => cpu_count() * 4, // Número de procesos, por defecto el quadruple de la CPU
'user' => '', // Usuario del proceso, debe ser un usuario de bajo nivel
'group' => '', // Grupo de usuarios del proceso, debe ser un grupo de bajo nivel
'reusePort' => false, // Si se habilita reusePort, las conexiones se distribuirán equitativamente a diferentes procesos worker
'eventLoop' => '', // Clase del bucle de eventos, si está vacía Usará la configuración server.event_loop automáticamente
'context' => [], // Configuración del contexto de escucha, como ssl
'constructor' => [ // Parámetros del constructor de la clase de manejo del proceso, en este ejemplo son los parámetros del constructor de la clase Http
'requestClass' => Request::class, // Se puede definir una clase de solicitud personalizada
'logger' => Log::channel('default'), // Instancia de log
'appPath' => app_path(), // Ubicación del directorio app
'publicPath' => public_path() // Ubicación del directorio public
]
],
// Proceso de monitoreo, utilizado para detectar actualizaciones de archivos y cargas automáticas y fugas de memoria
'monitor' => [
'handler' => app\process\Monitor::class, // Clase de manejo
'reloadable' => false, // El proceso actual no ejecuta reload
'constructor' => [ // Parámetros del constructor de la clase de manejo del proceso
// Directorio a monitorear, no debe ser excesivo, ya que hará que la detección sea más lenta
'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')),
// Monitorear la actualización de estos archivos con las siguientes extensiones
'monitorExtensions' => [
'php', 'html', 'htm', 'env'
],
// Otras opciones
'options' => [
// Si habilitar monitoreo de archivos, solo válido en linux, por defecto el modo demonio no habilita monitoreo de archivos
'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
// Si habilitar monitoreo de memoria, solo compatible con habilitación en linux
'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
]
]
]
];
container.php
// Devuelve una instancia del contenedor de inyección de dependencias psr-11
return new Webman\Container;
dependence.php
// Se utiliza para configurar los servicios y las relaciones de dependencia en el contenedor de inyección de dependencias
return [];
route.php
use support\Route;
// Define la ruta para /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 // Clase de manejo de vista por defecto
];
autoload.php
// Configurar los archivos que se auto-cargan en el framework
return [
'files' => [
base_path() . '/app/functions.php',
base_path() . '/support/Request.php',
base_path() . '/support/Response.php',
]
];
cache.php
// Configuración de caché
return [
'default' => 'file', // Archivo por defecto
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache') // Ubicación de almacenamiento de archivos de caché
],
'redis' => [
'driver' => 'redis',
'connection' => 'default' // Nombre de conexión de redis, correspondiente a la configuración en redis.php
],
'array' => [
'driver' => 'array' // Caché en memoria, expira después del reinicio
]
]
];
redis.php
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
];
database.php
return [
// Base de datos por defecto
'default' => 'mysql',
// Configuraciones para diversas bases de datos
'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 [
// Establecer la clase de manejo de excepciones
'' => support\exception\Handler::class,
];
log.php
return [
'default' => [
'handlers' => [
[
'class' => Monolog\Handler\RotatingFileHandler::class, // Procesador
'constructor' => [
runtime_path() . '/logs/webman.log', // Nombre del log
7, //$maxFiles // Mantener logs de hasta 7 días
Monolog\Logger::DEBUG, // Nivel de log
],
'formatter' => [
'class' => Monolog\Formatter\LineFormatter::class, // Formateador
'constructor' => [null, 'Y-m-d H:i:s', true], // Parámetros de formateo
],
]
],
],
];
session.php
return [
// Tipo
'type' => 'file', // o redis o redis_cluster
// Procesador
'handler' => FileSessionHandler::class,
// Configuración
'config' => [
'file' => [
'save_path' => runtime_path() . '/sessions', // Directorio de almacenamiento
],
'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', // Nombre de la sesión
'auto_update_timestamp' => false, // Si se actualiza automáticamente la marca de tiempo, evita la expiración de la sesión
'lifetime' => 7*24*60*60, // Tiempo de vida
'cookie_lifetime' => 365*24*60*60, // Tiempo de vida de la cookie
'cookie_path' => '/', // Ruta de la cookie
'domain' => '', // Dominio de la cookie
'http_only' => true, // Solo acceso HTTP
'secure' => false, // Solo acceso HTTPS
'same_site' => '', // Propiedad SameSite
'gc_probability' => [1, 1000], // Probabilidad de recolección de sesiones
];
middleware.php
// Configurar middleware
return [];
static.php
return [
'enable' => true, // Si se habilita el acceso a archivos estáticos de webman
'middleware' => [ // Middleware para archivos estáticos, se puede usar para configurar políticas de caché, CORS, etc.
//app\middleware\StaticFile::class,
],
];
translation.php
return [
// Idioma por defecto
'locale' => 'zh_CN',
// Idioma de respaldo
'fallback_locale' => ['zh_CN', 'en'],
// Ubicación de almacenamiento de archivos de idioma
'path' => base_path() . '/resource/translations',
];