Primeros pasos
Configuración
La clase Configure
Toda la configuración vive en un único arreglo en memoria que se lee y escribe con claves separadas por puntos.
Configure::read('Templates.Theme'); // 'cgs'
Configure::read('Debug.Level', 0); // con valor por defecto
Configure::check('Google.Recaptcha'); // ¿existe la clave?
Configure::write('Templates.Site.phone', '...'); // crea los niveles que falten
Configure::consume('flash_message'); // lee y borra
Configure::delete('scripts');
Configure::merge(['Web' => ['SiteName' => 'X']]); // fusión profunda
Desde Smarty se usa igual: {Configure::read('Web.SiteName')}.
Tip
Configure también sirve como almacenamiento de la petición en curso: la ruta (System.Route), los scripts y estilos agregados (scripts, styles) y los mensajes (flash_message, error_message) se guardan ahí.
Cómo se cargan los archivos
Koshkil::loadConfig() se ejecuta al incluir core/Koshkil.php. Por cada archivo de la lista carga primero la versión global de config/ y después, si existe, la del dominio. Cada archivo define un arreglo $CONFIG que se fusiona en profundidad con lo ya cargado, así que el dominio solo necesita declarar lo que cambia.
Archivos que se cargan en cada petición, en este orden:
config.phpdatasources.phpcache.phpextensions.phpsessions.phprewrite.phpi18n.php
Para cada uno, la sobrescritura del dominio se busca en este orden (se usa la primera que exista):
| Ubicación | Ejemplo |
|---|---|
config/domains/cli/<archivo> |
solo si SERVER_NAME está vacío (línea de comandos) |
config/domains/<dominio>/<archivo> |
config/domains/misitio.com/config.php |
config/domains/<dominio>/<archivo>.php |
|
config/domains/<dominio>.<archivo> |
config/domains/misitio.com.config.php |
config/domains/<dominio>.php |
solo para config.php |
Otros archivos se cargan a pedido: email.php al enviar correo, google.php desde SuperController, api.php desde ApiService. Podés cargar los tuyos igual:
Koshkil::loadConfig(['pagos.php']); // config/pagos.php + config/domains/<dominio>/pagos.php
Reutilizar la configuración de otro dominio
Un dominio de desarrollo puede partir del de producción e incluir su archivo antes de cambiar lo necesario:
php
<?php
require __DIR__ . '/../misitio.com/config.php';
$CONFIG = array_merge($CONFIG, ['Debug' => ['Level' => 2, 'Javascript' => true]]);
Claves principales
config.php
| Clave | Uso |
|---|---|
System.DefaultController |
Controlador que responde cuando la URL no coincide con ninguno (por defecto index). |
System.Text.MaxLength |
Largo máximo de textos usado por algunas utilidades. |
Templates.Theme |
Carpeta de webroot/themes/ que usa el sitio público. |
Templates.Menu, Templates.Site |
Datos que leen los widgets y plantillas de cada theme (menú, datos de contacto…). |
Web.SiteName |
Nombre del sitio. |
Debug.Level |
0 = sin logs; 1 a 3 = logs con distinto enmascarado de datos sensibles; 6 = registra todo el SQL; 7 = perfila cada modelo. |
Debug.Rewrite |
5 o más registra el proceso de reescritura en tmp/logs/rewrite.log. |
Debug.Javascript |
false hace que WebElements::addScript() prefiera la versión .min.js si existe. |
Debug.Profiler.Enabled |
Activa el perfilador de tiempos (ver Caché, logs y depuración). |
Error.Reporting |
Valor para error_reporting(). |
Log.MaxSize, Log.KeepHistory, Log.MaxHistory |
Rotación de los archivos de log. |
Session.UserHandler.Frontend / .Backend |
Nombre de la variable de sesión del usuario en el sitio y en el panel. |
datasources.php
$CONFIG = [
'Database' => [
'AutoUpdateSchema' => true, // sincroniza tablas con los modelos
'master' => [ // conexión por defecto
'Driver' => 'MySQLi', // MySQLi, PostgreSQL, SQLite, SQLServer, Oracle
'Host' => 'localhost',
'Port' => 3306, // opcional
'Charset' => 'utf8mb4', // opcional
'User' => '...',
'Password' => '...',
'Name' => 'mi_base', // en SQLite: ruta del archivo
],
],
];
Otros archivos
| Archivo | Contenido | Más información |
|---|---|---|
cache.php |
Motores y dominios de caché | Caché |
sessions.php |
Motor de sesión, nombre de cookie, tiempos | Seguridad |
rewrite.php |
System.Web.Rewrite: reglas de reescritura |
Ruteo |
i18n.php |
Idiomas, idioma por defecto, detección | Internacionalización |
extensions.php |
Extensions.Chat, Extensions.Ftp, Extensions.Pusher |
|
email.php |
Email.Smtp y remitente |
Utilidades |
google.php |
Google.Recaptcha.SiteKey y clave secreta |
Seguridad |
api.php |
Credenciales de la API interna del dominio | API REST |
Credenciales
datasources.php, api.php y email.php guardan contraseñas en texto plano. config/ queda fuera de webroot/, pero no subas esos archivos de los dominios reales al repositorio.