Router a routování
Základní jednoduchý Siler router, viz. dokumentace.
Bootstrap
Základní bootstrap.php volá postupně jednotlivé skupiny route uložené v adresáři app/routes a testuje platnost pravidla URL:
require 'routes/data.php';
require 'routes/file.php';
require 'routes/run.php';
require 'routes/cron.php';
require 'routes/app-backend.php';
require 'routes/app-frontend.php';
require 'routes/404.php';
Pravidlo
Dle logiky Sileru je třeba platnou routu ukončit příkazem exit, jinak se budou procházet další. Většinou budete zasahovat do app-frontend.php nebo app-backend.php. Není problém vytvořit si svou skupinu route specifickou pro daný projekt.
Specifické URL routy
| URL | Popis |
|---|---|
CRON/{name} |
Volá cron skripty |
getData/{name} |
Volá skripty či odkazy na získání dat |
RUN/{name} |
Volá tagy, používá se namísto stránek při volání hlavně pomocí fetch z Javascriptu |
getFile/{name} |
TODO: volání souborů s omezeným přístupem |
Příklady routování
Přímé volání kontroleru
Route\get('/', DIR . '/app/Controllers/home.php');
S podmínkami ve funkci
Route\get('/', function () {
$foo = 1;
if ($foo === 1) {
require DIR . '/app/Controllers/home.php';
}
});
Kontroler jako callable funkce
Route\get('/', function () {
$controller = require_fn(DIR . '/app/Controllers/home.php');
$controller();
});
S middleware pipeline
use function Siler\Stratigility\pipe;
use function Siler\Stratigility\process;
pipe(settingMiddleware, 'frontend');
pipe(sanitizationMiddleware, 'frontend');
$handler = fn($request, $params) => require_fn(DIR . '/app/Controllers/home.php')($params);
Route\get('/', process($request, 'frontend')($handler), $request);
HTTP metody
Route\get('/path', ...); // GET
Route\post('/path', ...); // POST
Route\any('/path', ...); // GET, POST, ...
URL parametry
Route\get('/{slug}', ...); // /some-page
Route\get('/user/{id}', ...); // /user/123
Middleware pipeline
Middleware se spouští v definovaném pořadí v rámci pojmenované pipeline:
pipe(middleware1, 'pipelineName');
pipe(middleware2, 'pipelineName');
pipe(middleware3, 'pipelineName');
$handler = fn($request, $params) => require_fn(DIR . '/app/Controllers/page.php')($params);
Route\any('/path', process($request, 'pipelineName')($handler), $request);
Poslední middleware se automaticky bude podílet na finálním výstupu.