Primeiros passos
Introdução
Koshkil é um framework PHP leve, no estilo MVC, sobre o qual o SitioYa é construído. Ele resolve o que quase todo site precisa (roteamento, controladores, templates, acesso ao banco de dados, usuários e permissões, traduções, API e cache) com pouquíssima configuração e sem impor uma estrutura rígida.
O que inclui
| Área | O que resolve | Onde fica |
|---|---|---|
| Roteamento | Converte a URL em controlador, ação e argumentos. Regras de reescrita por expressão regular. | core/http/Route.php, core/http/RewriteManager.php |
| Controladores | Ciclo de vida com hooks, controle de acesso, respostas HTML, JSON ou JavaScript. | core/web/, src/Controllers/ |
| Views | Templates Smarty 4 organizados em temas, widgets reutilizáveis e plugins de Smarty próprios. | core/web/View.php, webroot/themes/ |
| Modelos | Active record com construtor de consultas encadeável, relações, eventos e comportamentos. O esquema é criado e atualizado automaticamente. | core/db/ |
| Segurança | Sessões (arquivo ou banco de dados), usuários, papéis e regras com permissões por bits. | core/http/Session.php, core/models/ |
| Internacionalização | Traduções em JSON por idioma e domínio, helpers __() e tags {t}. |
core/tools/I18n.php, config/locales/ |
| API REST | Um único ponto de entrada, ações classe.método, chamadas em lote e uso interno sem HTTP. |
core/web/Rest/, src/api/ |
| Cache | Motores de arquivo, Redis e nulo, configurados por domínio de uso. | core/cache/ |
| Plugins | Módulos autocontidos com seus próprios controladores, modelos, templates, permissões e menu. | plugins/ |
Conceitos principais
- Convenção antes de configuração. A URL
/productos/ver/15executaProductosController::ver(15)e exibe o templateproductos/ver.tplsem registrar nada. - Configuração por domínio. O mesmo código atende vários sites. Cada domínio pode sobrescrever qualquer arquivo de
config/a partir deconfig/domains/<domínio>/, inclusive o tema. - Tudo passa por
Koshkil. A classe estáticaKoshkilcarrega arquivos (Koshkil::Uses()) e modelos (Koshkil::UsesModel()), monta links (Koshkil::getLink()) e guarda o controlador atual (Koshkil::$controller). - Esquema declarativo. Cada modelo descreve sua tabela em código. Com
Database.AutoUpdateSchemaativo, o Koshkil cria a tabela e a mantém sincronizada com essa definição (veja Modelos).
Uma olhada rápida
Um controlador e seu template:
<?php
// src/Controllers/SaludoController.php -> /saludo e /saludo/hola/Daniel
Koshkil::Uses('com.SuperController');
class SaludoController extends SuperController {
public function index() {
$this->set(['mensaje' => 'Bem-vindo']);
}
public function hola($nombre = 'mundo') {
$this->set(['nombre' => $nombre]);
}
}
{* webroot/themes/<tema>/templates/front/saludo/hola.tpl *}
<h1>Olá, {$nombre|escape}</h1>
Um modelo com sua tabela:
<?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();
Como ler esta documentação
- Comece por Instalação e Estrutura do projeto.
- Ciclo de vida de uma requisição explica como todas as peças se encaixam.
- Depois, cada capítulo pode ser lido separadamente, conforme a necessidade.
Convenções
Os caminhos de arquivo são relativos à raiz do projeto. <tema> é o valor de Templates.Theme e <domínio> é o nome do servidor ($_SERVER['SERVER_NAME']). O código do SitioYa usa nomes em espanhol (usuarios, productos…); os exemplos os mantêm para coincidir com o código real.