Skip to content

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.