Arquivo de Configuração
Localização
O arquivo de configuração do webman está localizado no diretório config/
, e no projeto pode-se obter a configuração correspondente através da função config()
.
Obtendo Configurações
Obter todas as configurações
config();
Obter todas as configurações do config/app.php
config('app');
Obter a configuração debug
do config/app.php
config('app.debug');
Se a configuração for um array, pode-se acessar os valores internos do array usando .
, por exemplo
config('file.key1.key2');
Valor Padrão
config($key, $default);
O config
aceita um segundo parâmetro que passa um valor padrão, se a configuração não existir, retornará o valor padrão.
Se a configuração não existir e nenhum valor padrão for definido, retornará null.
Configuração Personalizada
Os desenvolvedores podem adicionar seus próprios arquivos de configuração no diretório config/
, por exemplo
config/payment.php
<?php
return [
'key' => '...',
'secret' => '...'
];
Uso ao obter a configuração
config('payment');
config('payment.key');
config('payment.key');
Alterando Configurações
O webman não suporta a alteração dinâmica das configurações; todas as configurações devem ser modificadas manualmente no arquivo de configuração correspondente e, em seguida, é necessário reload
ou restart
para reiniciar o servidor.
Atenção
A configuração do servidor emconfig/server.php
e a configuração de processo emconfig/process.php
não suportamreload
, é necessáriorestart
para que tenham efeito.
Aviso Especial
Se você deseja criar e ler arquivos de configuração em um subdiretório dentro de config, por exemplo: config/order/status.php
, então o diretório config/order
precisa conter um arquivo app.php
com o seguinte conteúdo
<?php
return [
'enable' => true,
];
enable
como true
significa que o framework irá ler as configurações deste diretório.
A estrutura final do diretório de arquivos de configuração será semelhante a esta:
├── config
│ ├── order
│ │ ├── app.php
│ │ └── status.php
Desta forma, você poderá acessar config.order.status
para ler o array retornado no status.php
ou dados de uma chave específica.
Explicação dos Arquivos de Configuração
server.php
return [
'listen' => 'http://0.0.0.0:8787', // Porta de escuta (removido a partir da versão 1.6.0, configurado em config/process.php)
'transport' => 'tcp', // Protocolo da camada de transporte (removido a partir da versão 1.6.0, configurado em config/process.php)
'context' => [], // Configurações de ssl, etc. (removido a partir da versão 1.6.0, configurado em config/process.php)
'name' => 'webman', // Nome do processo (removido a partir da versão 1.6.0, configurado em config/process.php)
'count' => cpu_count() * 4, // Número de processos (removido a partir da versão 1.6.0, configurado em config/process.php)
'user' => '', // Usuário (removido a partir da versão 1.6.0, configurado em config/process.php)
'group' => '', // Grupo do usuário (removido a partir da versão 1.6.0, configurado em config/process.php)
'reusePort' => false, // Se habilitar a reutilização da porta (removido a partir da versão 1.6.0, configurado em config/process.php)
'event_loop' => '', // Classe do loop de eventos, escolha automática por padrão
'stop_timeout' => 2, // Tempo máximo para aguardar o processamento ao receber sinais de stop/restart/reload; se ultrapassado, o processo será forçado a sair
'pid_file' => runtime_path() . '/webman.pid', // Local de armazenamento do arquivo pid
'status_file' => runtime_path() . '/webman.status', // Local de armazenamento do arquivo status
'stdout_file' => runtime_path() . '/logs/stdout.log', // Local do arquivo de saída padrão; todas as saídas serão gravadas neste arquivo após o start do webman
'log_file' => runtime_path() . '/logs/workerman.log', // Local do arquivo de log do workerman
'max_package_size' => 10 * 1024 * 1024 // Tamanho máximo do pacote de dados, 10M. O tamanho do arquivo de upload está sujeito a este limite
];
app.php
return [
'debug' => true, // Se habilitar o modo debug; quando habilitado, erros na página mostrarão a pilha de chamadas e outras informações de depuração; para segurança em ambientes de produção, o debug deve estar desativado
'error_reporting' => E_ALL, // Nível de relatório de erros
'default_timezone' => 'Asia/Shanghai', // Fuso horário padrão
'public_path' => base_path() . DIRECTORY_SEPARATOR . 'public', // Localização do diretório público
'runtime_path' => base_path(false) . DIRECTORY_SEPARATOR . 'runtime', // Localização do diretório de runtime
'controller_suffix' => 'Controller', // Sufixo do controlador
'controller_reuse' => false, // Se os controladores devem ser reutilizados
];
process.php
use support\Log;
use support\Request;
use app\process\Http;
global $argv;
return [
// Configuração do processo do webman
'webman' => [
'handler' => Http::class, // Classe de tratamento do processo
'listen' => 'http://0.0.0.0:8787', // Endereço de escuta
'count' => cpu_count() * 4, // Número de processos, padrão 4 vezes a quantidade de CPU
'user' => '', // Usuário sob o qual o processo será executado, deve ser um usuário de baixo nível
'group' => '', // Grupo sob o qual o processo será executado, deve ser um grupo de baixo nível
'reusePort' => false, // Se habilitar a reutilização da porta; quando habilitado, as conexões serão distribuídas uniformemente entre diferentes processos worker
'eventLoop' => '', // Classe do loop de eventos; se estiver vazio, será utilizada a configuração server.event_loop
'context' => [], // Configuração de contexto de escuta, por exemplo, ssl
'constructor' => [ // Parâmetros do construtor da classe de tratamento do processo; neste exemplo são os parâmetros do construtor da classe Http
'requestClass' => Request::class, // Classe de requisição personalizada
'logger' => Log::channel('default'), // Instância do logger
'appPath' => app_path(), // Localização do diretório app
'publicPath' => public_path() // Localização do diretório público
]
],
// Processo de monitoramento, usado para detectar atualizações de arquivos para recarregamento automático e vazamento de memória
'monitor' => [
'handler' => app\process\Monitor::class, // Classe de tratamento
'reloadable' => false, // O processo atual não executa reload
'constructor' => [ // Parâmetros do construtor da classe de tratamento do processo
// Diretórios a serem monitorados; não muito, pois isso pode retardar a detecção
'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')),
// Monitorar atualizações de arquivos com estas extensões
'monitorExtensions' => [
'php', 'html', 'htm', 'env'
],
// Outras opções
'options' => [
// Se habilitar o monitoramento de arquivos; apenas eficaz em linux, padrão é desabilitar em modo daemon
'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
// Se habilitar o monitoramento de memória; apenas suporte em linux
'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
]
]
]
];
container.php
// Retorna uma instância do contêiner de injeção de dependências psr-11
return new Webman\Container;
dependence.php
// Usado para configurar serviços e relações de dependência no contêiner de injeção de dependências
return [];
route.php
use support\Route;
// Define a rota para o caminho /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 de processamento de visualizações padrão
];
autoload.php
// Configuração dos arquivos que são carregados automaticamente pelo framework
return [
'files' => [
base_path() . '/app/functions.php',
base_path() . '/support/Request.php',
base_path() . '/support/Response.php',
]
];
cache.php
// Configuração de cache
return [
'default' => 'file', // Padrão é arquivo
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache') // Local de armazenamento dos arquivos de cache
],
'redis' => [
'driver' => 'redis',
'connection' => 'default' // Nome da conexão redis, corresponde à configuração em redis.php
],
'array' => [
'driver' => 'array' // Cache na memória, expira após reinicialização
]
]
];
redis.php
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
];
database.php
return [
// Banco de dados padrão
'default' => 'mysql',
// Configurações de vários bancos de dados
'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 [
// Definir a classe de tratamento de exceções
'' => support\exception\Handler::class,
];
log.php
return [
'default' => [
'handlers' => [
[
'class' => Monolog\Handler\RotatingFileHandler::class, // Processador
'constructor' => [
runtime_path() . '/logs/webman.log', // Nome do log
7, //$maxFiles // Manter logs dos últimos 7 dias
Monolog\Logger::DEBUG, // Nível de log
],
'formatter' => [
'class' => Monolog\Formatter\LineFormatter::class, // Formatador
'constructor' => [null, 'Y-m-d H:i:s', true], // Parâmetros de formatação
],
]
],
],
];
session.php
return [
// Tipo
'type' => 'file', // ou redis ou redis_cluster
// Processador
'handler' => FileSessionHandler::class,
// Configuração
'config' => [
'file' => [
'save_path' => runtime_path() . '/sessions', // Diretório de armazenamento
],
'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 da sessão
'auto_update_timestamp' => false, // Se atualizar automaticamente o timestamp, a fim de evitar expiração da sessão
'lifetime' => 7*24*60*60, // Tempo de vida
'cookie_lifetime' => 365*24*60*60, // Tempo de vida do cookie
'cookie_path' => '/', // Caminho do cookie
'domain' => '', // Domínio do cookie
'http_only' => true, // Apenas acessível via http
'secure' => false, // Apenas acessível via https
'same_site' => '', // Atributo SameSite
'gc_probability' => [1, 1000], // Probabilidade de coleta de sessões
];
middleware.php
// Definir middleware
return [];
static.php
return [
'enable' => true, // Se habilitar o acesso a arquivos estáticos do webman
'middleware' => [ // Middleware para arquivos estáticos, pode ser usado para definir estratégias de cache, cross-origin, etc.
//app\middleware\StaticFile::class,
],
];
translation.php
return [
// Idioma padrão
'locale' => 'zh_CN',
// Idioma de fallback
'fallback_locale' => ['zh_CN', 'en'],
// Local de armazenamento dos arquivos de idioma
'path' => base_path() . '/resource/translations',
];