File di configurazione

Posizione

I file di configurazione di webman si trovano nella directory config/, e nel progetto è possibile ottenere la relativa configurazione tramite la funzione config().

Ottenere configurazione

Ottenere tutte le configurazioni

config();

Ottenere tutte le configurazioni in config/app.php

config('app');

Ottenere la configurazione debug in config/app.php

config('app.debug');

Se la configurazione è un array, è possibile ottenere il valore degli elementi interni dell'array tramite ., ad esempio

config('file.key1.key2');

Valore predefinito

config($key, $default);

config attraverso il secondo parametro passa un valore predefinito, se la configurazione non esiste ritorna il valore predefinito.
Se la configurazione non esiste e non è stato impostato alcun valore predefinito, ritorna null.

Configurazione personalizzata

Gli sviluppatori possono aggiungere i propri file di configurazione nella directory config/, ad esempio

config/payment.php

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

Utilizzando durante l'ottenimento della configurazione

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

Modificare configurazione

Webman non supporta la modifica dinamica della configurazione, tutte le configurazioni devono essere modificate manualmente nei relativi file di configurazione, e deve essere eseguito reload o restart per riavviare.

Attenzione
La configurazione del server config/server.php e la configurazione del processo config/process.php non supportano reload, è necessario restart per avere effetto.

Avviso speciale

Se desideri creare e leggere file di configurazione in una sottodirectory sotto config, ad esempio: config/order/status.php, allora la directory config/order deve contenere un file app.php con il seguente contenuto

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

enable impostato su true indica che il framework deve leggere la configurazione in questa directory.
La struttura finale della directory dei file di configurazione sarà simile a quella sottostante

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

In questo modo puoi leggere l'array restituito o i dati di una chiave specifica da status.php utilizzando config.order.status.

Spiegazione dei file di configurazione

server.php

return [
    'listen' => 'http://0.0.0.0:8787', // Porta di ascolto (rimossa a partire dalla versione 1.6.0, configurare in config/process.php)
    'transport' => 'tcp', // Protocollo di trasporto (rimossa a partire dalla versione 1.6.0, configurare in config/process.php)
    'context' => [], // Configurazioni ssl e altro (rimossa a partire dalla versione 1.6.0, configurare in config/process.php)
    'name' => 'webman', // Nome del processo (rimossa a partire dalla versione 1.6.0, configurare in config/process.php)
    'count' => cpu_count() * 4, // Numero di processi (rimossa a partire dalla versione 1.6.0, configurare in config/process.php)
    'user' => '', // Utente (rimossa a partire dalla versione 1.6.0, configurare in config/process.php)
    'group' => '', // Gruppo utente (rimossa a partire dalla versione 1.6.0, configurare in config/process.php)
    'reusePort' => false, // Attivare la riutilizzazione della porta (rimossa a partire dalla versione 1.6.0, configurare in config/process.php)
    'event_loop' => '',  // Classe del ciclo di eventi, selezione automatica predefinita
    'stop_timeout' => 2, // Massimo tempo di attesa per completare il trattamento quando si riceve il segnale stop/restart/reload, superato questo tempo il processo verrà forzatamente terminato
    'pid_file' => runtime_path() . '/webman.pid', // Posizione di archiviazione del file pid
    'status_file' => runtime_path() . '/webman.status', // Posizione di archiviazione del file di stato
    'stdout_file' => runtime_path() . '/logs/stdout.log', // Posizione del file di output standard, dopo l'avvio di webman, tutti gli output verranno scritti in questo file
    'log_file' => runtime_path() . '/logs/workerman.log', // Posizione del file di log di workerman
    'max_package_size' => 10 * 1024 * 1024 // Dimensione massima del pacchetto dati, 10M. La dimensione dei file caricati è soggetta a questo limite
];

app.php

return [
    'debug' => true,  // Attivare la modalità debug, gli errori della pagina mostreranno stack trace e altre informazioni di debug, dovrebbe essere disattivato per ambienti di produzione sicuri
    'error_reporting' => E_ALL, // Livello di reporting degli errori
    'default_timezone' => 'Asia/Shanghai', // Fuso orario predefinito
    'public_path' => base_path() . DIRECTORY_SEPARATOR . 'public', // Posizione della directory pubblica
    'runtime_path' => base_path(false) . DIRECTORY_SEPARATOR . 'runtime', // Posizione della directory runtime
    'controller_suffix' => 'Controller', // Suffisso del controller
    'controller_reuse' => false, // Riutilizzo del controller
];

process.php

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

return [
     // Configurazione del processo webman
    'webman' => [ 
        'handler' => Http::class, // Classe di gestione del processo
        'listen' => 'http://0.0.0.0:8787', // Indirizzo di ascolto
        'count' => cpu_count() * 4, // Numero di processi, 4 volte il numero di cpu
        'user' => '', // Utente che esegue il processo, dovrebbe essere un utente con privilegi bassi
        'group' => '', // Gruppo utente che esegue il processo, dovrebbe essere un gruppo utente con privilegi bassi
        'reusePort' => false, // Attivare reusePort, dopo l'attivazione le connessioni verranno distribuite in modo uniforme ai diversi processi worker
        'eventLoop' => '', // Classe del ciclo di eventi, utilizza automaticamente la configurazione server.event_loop se vuota
        'context' => [], // Configurazione del contesto di ascolto, ad esempio ssl
        'constructor' => [ // Parametri del costruttore della classe di gestione del processo, in questo esempio sono i parametri del costruttore della classe Http
            'requestClass' => Request::class, // Classe di richiesta personalizzabile
            'logger' => Log::channel('default'), // Istanza di log
            'appPath' => app_path(), // Posizione della directory app
            'publicPath' => public_path() // Posizione della directory pubblica
        ]
    ],
    // Processo di monitoraggio, utilizzato per rilevare aggiornamenti ai file e ricaricare automaticamente e problemi di memoria
    'monitor' => [
        'handler' => app\process\Monitor::class, // Classe di gestione
        'reloadable' => false, // Il processo attuale non esegue reload
        'constructor' => [ // Parametri del costruttore della classe di gestione del processo
            // Directory da monitorare, non esagerare, altrimenti il controllo diventa lento
            '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')),
            // Monitorare gli aggiornamenti a questi file di estensione
            'monitorExtensions' => [
                'php', 'html', 'htm', 'env'
            ],
            // Altre opzioni
            'options' => [
                // Attivare il monitoraggio dei file, valido solo su linux, per impostazione predefinita il processo in modalità demone non attiva il monitoraggio dei file
                'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
                // Attivare il monitoraggio della memoria, supportato solo su linux
                'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
            ]
        ]
    ]
];

container.php

// Restituisce un'istanza del contenitore di iniezione delle dipendenze psr-11
return new Webman\Container;

dependence.php

// Utilizzato per configurare i servizi e le dipendenze nel contenitore di iniezione delle dipendenze
return [];

route.php


use support\Route;
// Definire la rotta per il percorso /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 // Classe di gestione della vista predefinita 
];

autoload.php

// Configurazione dei file da caricare automaticamente dal framework
return [
    'files' => [
        base_path() . '/app/functions.php',
        base_path() . '/support/Request.php',
        base_path() . '/support/Response.php',
    ]
];

cache.php

// Configurazione della cache
return [
    'default' => 'file', // File predefinito
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => runtime_path('cache') // Posizione di archiviazione dei file di cache
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default' // Nome della connessione redis, corrisponde alla configurazione in redis.php
        ],
        'array' => [
            'driver' => 'array' // Cache in memoria, scade dopo il riavvio
        ]
    ]
];

redis.php

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

database.php

return [
 // Database predefinito
 'default' => 'mysql',
 // Configurazioni per vari database
 '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 [
    // Imposta la classe di gestione delle eccezioni 
    '' => support\exception\Handler::class,
];

log.php

return [
    'default' => [
        'handlers' => [
            [
                'class' => Monolog\Handler\RotatingFileHandler::class, // Gestore
                'constructor' => [
                    runtime_path() . '/logs/webman.log', // Nome del log
                    7, //$maxFiles // Conservarlo per 7 giorni
                    Monolog\Logger::DEBUG, // Livello di log
                ],
                'formatter' => [
                    'class' => Monolog\Formatter\LineFormatter::class, // Formattatore
                    'constructor' => [null, 'Y-m-d H:i:s', true], // Parametri di formattazione
                ],
            ]
        ],
    ],
];

session.php

return [
     // Tipo
    'type' => 'file', // o redis o redis_cluster
     // Gestore
    'handler' => FileSessionHandler::class,
     // Configurazione
    'config' => [
        'file' => [
            'save_path' => runtime_path() . '/sessions', // Directory di archiviazione
        ],
        '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', // Nome della sessione
    'auto_update_timestamp' => false, // Aggiornare automaticamente il timestamp, per evitare che la sessione scada
    'lifetime' => 7*24*60*60, // Durata della vita
    'cookie_lifetime' => 365*24*60*60, // Durata della vita del cookie
    'cookie_path' => '/', // Percorso del cookie
    'domain' => '', // Dominio del cookie
    'http_only' => true, // Accesso solo http
    'secure' => false, // Accesso solo https
    'same_site' => '', // Attributo SameSite
    'gc_probability' => [1, 1000], // Probabilità di recupero della sessione
];

middleware.php

// Imposta i middleware
return [];

static.php

return [
    'enable' => true, // Attivare l'accesso ai file statici di webman
    'middleware' => [ // Middleware per i file statici, utilizzabile per impostare strategie di caching, CORS, ecc.
        //app\middleware\StaticFile::class,
    ],
];

translation.php

return [
    // Lingua predefinita
    'locale' => 'zh_CN',
    // Lingua di fallback
    'fallback_locale' => ['zh_CN', 'en'],
    // Posizione di archiviazione dei file di lingua
    'path' => base_path() . '/resource/translations',
];