Primeros pasos
Introducción
Koshkil es un framework PHP liviano, de tipo MVC, sobre el que está construido SitioYa. Resuelve lo que casi todo sitio necesita (ruteo, controladores, plantillas, acceso a base de datos, usuarios y permisos, traducciones, API y caché) con muy poca configuración y sin imponer una estructura rígida.
Qué incluye
| Área | Qué resuelve | Dónde está |
|---|---|---|
| Ruteo | Convierte la URL en controlador, acción y argumentos. Reglas de reescritura por expresión regular. | core/http/Route.php, core/http/RewriteManager.php |
| Controladores | Ciclo de vida con hooks, control de acceso, respuestas HTML, JSON o JavaScript. | core/web/, src/Controllers/ |
| Vistas | Plantillas Smarty 4 organizadas en themes, widgets reutilizables y plugins de Smarty propios. | core/web/View.php, webroot/themes/ |
| Modelos | Active record con constructor de consultas encadenable, relaciones, eventos y comportamientos. El esquema se crea y actualiza solo. | core/db/ |
| Seguridad | Sesiones (archivo o base de datos), usuarios, roles y reglas con permisos por bits. | core/http/Session.php, core/models/ |
| Internacionalización | Traducciones en JSON por idioma y dominio, helpers __() y etiquetas {t}. |
core/tools/I18n.php, config/locales/ |
| API REST | Un único punto de entrada, acciones clase.método, llamadas en lote y uso interno sin HTTP. |
core/web/Rest/, src/api/ |
| Caché | Motores de archivo, Redis y nulo, con configuración por dominio de uso. | core/cache/ |
| Plugins | Módulos autocontenidos con sus propios controladores, modelos, plantillas, permisos y menú. | plugins/ |
Conceptos clave
- Convención antes que configuración. La URL
/productos/ver/15ejecutaProductosController::ver(15)y muestra la plantillaproductos/ver.tplsin registrar nada. - Configuración por dominio. Un mismo código atiende varios sitios. Cada dominio puede sobrescribir cualquier archivo de
config/desdeconfig/domains/<dominio>/, incluido el theme. - Todo pasa por
Koshkil. La clase estáticaKoshkilcarga archivos (Koshkil::Uses()), modelos (Koshkil::UsesModel()), arma enlaces (Koshkil::getLink()) y guarda el controlador en curso (Koshkil::$controller). - Esquema declarativo. Cada modelo describe su tabla en código. Con
Database.AutoUpdateSchemaactivo, Koshkil crea la tabla y la mantiene sincronizada con esa definición (ver Modelos).
Un vistazo rápido
Un controlador y su plantilla:
<?php
// src/Controllers/SaludoController.php -> /saludo y /saludo/hola/Daniel
Koshkil::Uses('com.SuperController');
class SaludoController extends SuperController {
public function index() {
$this->set(['mensaje' => 'Bienvenido']);
}
public function hola($nombre = 'mundo') {
$this->set(['nombre' => $nombre]);
}
}
{* webroot/themes/<theme>/templates/front/saludo/hola.tpl *}
<h1>Hola, {$nombre|escape}</h1>
Un modelo con su tabla:
<?php
// src/Models/productos.php -> Koshkil::UsesModel('productos') -> TMProductos
class TModelProductos extends TModel {
protected $tableName = 'tbl_productos';
public $primaryKeyColumn = 'prd_codigo';
protected $fillable = ['prd_nombre', 'prd_precio'];
protected function setupTableStructure() {
$this->table->id('prd_codigo')
->varchar('prd_nombre', 120, false, '')
->decimal('prd_precio', 10, 2, false, 0);
}
}
$baratos = TMProductos::where('prd_precio', '<', 1000)->order('prd_nombre')->get();
Cómo leer esta documentación
- Empezá por Instalación y Estructura del proyecto.
- Ciclo de vida de una petición explica cómo encajan todas las piezas.
- Después, cada capítulo se puede leer por separado según lo que necesites.
Convenciones
Las rutas de archivo son relativas a la raíz del proyecto. <theme> es el valor de Templates.Theme y <dominio> es el nombre del servidor ($_SERVER['SERVER_NAME']).