Concepten

Modules

Een feature verpakken met zijn routes, templates, libraries en data.

Een module verpakt een feature: de routes, templates, libraries en de data die hij nodig heeft, in één map. Gebruik er een als de onderdelen bij elkaar horen en als geheel naar een ander project zouden kunnen, zoals een webshop, een ledensysteem of een betaalkoppeling met de bijbehorende 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

Een losse template of library heeft geen module nodig. Zet die in ext/tpl/ of ext/lib/.

Hoe modules laden

Modules in ext/modules/ en core/modules/ worden bij elk request gevonden. Hun templates en libraries roep je bij hun naam aan, net als alle andere: ext/modules/membership/tpl/member-status/index.tpl is [#member-status#]. Hun routes worden deel van de adressen van de site: ext/modules/membership/uri/join/index.tpl antwoordt op /join. Zoals overal gaat ext/ vóór core/.

Het framework zelf is zo gebouwd. De admin, de API, formulieren, gebruikers en agents zijn modules in core/modules/.

Een module installeren

.install.inc draait één keer, als de module wordt geïnstalleerd. Het maakt de resources die de module nodig heeft en registreert de dynamische routes ervan:

<?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

Events in modules

Een resource-event noemt een functie volgens een vaste afspraak. Met "events": {"create": ["member-joined"]} in de .meta van een resource roept Nimbly na elk nieuw record member_joined($event) aan uit lib/member-joined.php in een module. Zie Werk op de achtergrond.

Bekijk deze pagina als Markdown