Conceitos

Módulos

Empacotar uma funcionalidade com suas rotas, templates, bibliotecas e dados.

Um módulo empacota uma funcionalidade: suas rotas, templates, bibliotecas e os dados de que precisa, numa única pasta. Use um quando as partes andam juntas e poderiam ir para outro projeto como uma unidade, como uma loja, um sistema de membros ou uma integração de pagamento com seu webhook.

ext/modules/membership/
  .install.inc     creates resources and registers routes
  lib/             libraries of the module
  tpl/             templates of the module
  uri/             routes of the module

Um template ou uma biblioteca isolada não precisa de módulo. Coloque-os em ext/tpl/ ou ext/lib/.

Como os módulos carregam

Os módulos em ext/modules/ e core/modules/ são encontrados a cada requisição. Seus templates e bibliotecas são chamados pelo nome como quaisquer outros: ext/modules/membership/tpl/member-status/index.tpl é [#member-status#]. Suas rotas entram no espaço de endereços do site: ext/modules/membership/uri/join/index.tpl responde em /join. Como em todo lugar, ext/ vem antes de core/.

O próprio framework é construído assim. O admin, a API, os formulários, os usuários e os agentes são módulos em core/modules/.

Instalando um módulo

O .install.inc roda uma vez, quando o módulo é instalado. Ele cria os recursos de que o módulo precisa e registra suas rotas dinâmicas:

<?php
load_library('data');

$result = data_create_resource('members', [
    'fields' => [
        'name' => ['name' => 'Name', 'type' => 'text', 'required' => true],
        'email' => ['name' => 'Email', 'type' => 'email', 'required' => true],
    ],
]);

$route = 'members/(id)';
$result &= data_exists('.routes', md5($route))
    || data_create('.routes', md5($route), ['route' => $route, 'order' => 200]);

return $result;
./nimbly module:install membership

Eventos de módulo

Um evento de recurso nomeia uma função por convenção. Com "events": {"create": ["member-joined"]} no .meta de um recurso, o Nimbly chama member_joined($event) de lib/member-joined.php num módulo após cada novo registro. Veja Trabalho em segundo plano.

Ver esta página em Markdown