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 en config/server.php y la configuración de los procesos en config/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',
];