Primeiros passos
Configuração
A classe Configure
Toda a configuração vive em um único array em memória, lido e escrito com chaves separadas por pontos.
Configure::read('Templates.Theme'); // 'cgs'
Configure::read('Debug.Level', 0); // com valor padrão
Configure::check('Google.Recaptcha'); // a chave existe?
Configure::write('Templates.Site.phone', '...'); // cria os níveis que faltam
Configure::consume('flash_message'); // lê e apaga
Configure::delete('scripts');
Configure::merge(['Web' => ['SiteName' => 'X']]); // mesclagem profunda
No Smarty funciona igual: {Configure::read('Web.SiteName')}.
Tip
Configure também guarda dados da requisição atual: a rota (System.Route), os scripts e estilos adicionados (scripts, styles) e as mensagens (flash_message, error_message).
Como os arquivos são carregados
Koshkil::loadConfig() é executado ao incluir core/Koshkil.php. Para cada arquivo da lista, carrega primeiro a versão global de config/ e depois, se existir, a do domínio. Cada arquivo define um array $CONFIG que é mesclado em profundidade com o que já foi carregado, então o domínio só precisa declarar o que muda.
Arquivos carregados em toda requisição, nesta ordem:
config.phpdatasources.phpcache.phpextensions.phpsessions.phprewrite.phpi18n.php
Para cada um, a sobrescrita do domínio é procurada nesta ordem (usa-se a primeira que existir):
| Local | Exemplo |
|---|---|
config/domains/cli/<arquivo> |
somente se SERVER_NAME estiver vazio (linha de comando) |
config/domains/<domínio>/<arquivo> |
config/domains/meusite.com/config.php |
config/domains/<domínio>/<arquivo>.php |
|
config/domains/<domínio>.<arquivo> |
config/domains/meusite.com.config.php |
config/domains/<domínio>.php |
somente para config.php |
Outros arquivos são carregados sob demanda: email.php ao enviar e-mail, google.php pelo SuperController, api.php pelo ApiService. Você pode carregar os seus da mesma forma:
Koshkil::loadConfig(['pagamentos.php']); // config/pagamentos.php + config/domains/<domínio>/pagamentos.php
Reaproveitar a configuração de outro domínio
Um domínio de desenvolvimento pode partir do de produção incluindo o arquivo dele antes de alterar o necessário:
php
<?php
require __DIR__ . '/../meusite.com/config.php';
$CONFIG = array_merge($CONFIG, ['Debug' => ['Level' => 2, 'Javascript' => true]]);
Principais chaves
config.php
| Chave | Uso |
|---|---|
System.DefaultController |
Controlador que responde quando a URL não coincide com nenhum (padrão index). |
System.Text.MaxLength |
Comprimento máximo de textos usado por alguns utilitários. |
Templates.Theme |
Pasta de webroot/themes/ usada pelo site público. |
Templates.Menu, Templates.Site |
Dados lidos pelos widgets e templates de cada tema (menu, dados de contato…). |
Web.SiteName |
Nome do site. |
Debug.Level |
0 = sem logs; 1 a 3 = logs com mascaramento diferente de dados sensíveis; 6 = registra todo o SQL; 7 = perfila cada modelo. |
Debug.Rewrite |
5 ou mais registra o processo de reescrita em tmp/logs/rewrite.log. |
Debug.Javascript |
false faz WebElements::addScript() preferir a versão .min.js, se existir. |
Debug.Profiler.Enabled |
Ativa o profiler de tempos (veja Cache, logs e depuração). |
Error.Reporting |
Valor para error_reporting(). |
Log.MaxSize, Log.KeepHistory, Log.MaxHistory |
Rotação dos arquivos de log. |
Session.UserHandler.Frontend / .Backend |
Nome da variável de sessão do usuário no site e no painel. |
datasources.php
$CONFIG = [
'Database' => [
'AutoUpdateSchema' => true, // sincroniza as tabelas com os modelos
'master' => [ // conexão padrão
'Driver' => 'MySQLi', // MySQLi, PostgreSQL, SQLite, SQLServer, Oracle
'Host' => 'localhost',
'Port' => 3306, // opcional
'Charset' => 'utf8mb4', // opcional
'User' => '...',
'Password' => '...',
'Name' => 'meu_banco', // no SQLite: caminho do arquivo
],
],
];
Outros arquivos
| Arquivo | Conteúdo | Mais informações |
|---|---|---|
cache.php |
Motores e domínios de cache | Cache |
sessions.php |
Motor de sessão, nome do cookie, tempos | Segurança |
rewrite.php |
System.Web.Rewrite: regras de reescrita |
Roteamento |
i18n.php |
Idiomas, idioma padrão, detecção | Internacionalização |
extensions.php |
Extensions.Chat, Extensions.Ftp, Extensions.Pusher |
|
email.php |
Email.Smtp e remetente |
Utilitários |
google.php |
Google.Recaptcha.SiteKey e chave secreta |
Segurança |
api.php |
Credenciais da API interna do domínio | API REST |
Credenciais
datasources.php, api.php e email.php guardam senhas em texto puro. config/ fica fora de webroot/, mas não envie esses arquivos dos domínios reais para o repositório.