Skip to content

Použití – Příklady Volání

Router (Frontend JS)

Systém automaticky mapuje URL na soubory dle adresářové struktury:

/getData/Entity/action?param=value → app/DATA/Entity/action.php

Například:

  • /getData/News/List?web=1&lang=csapp/DATA/News/List.php
  • /getData/CookiesBar/updateLog?csrf=TOKENapp/DATA/CookiesBar/updateLog.php

Z Admin Panelu (PHP – bez middleware)

GET volání:

use Petrovo\Data;
use Siler\Encoder\Json;

$query = ['web' => WEB, 'lang' => LANG];
$output = Data\get('News/List?' . http_build_query($query));
$news = Json\decode($output);

POST volání:

use Petrovo\Data;
use Siler\Encoder\Json;

$data = ['title' => 'Nový článek', 'content' => 'text'];
$output = Data\post('News/Create', $data);
$result = Json\decode($output);

Z Frontend Tagů (PHP – bez middleware)

// app/tags/news-list.php
use Petrovo\Data;
use Petrovo\Json\Json;

$_post = [
    'web' => WEB,
    'lang' => LANG,
];

$output = Data\post('News/_latestThree', $_post);
$newsData = Json\decode($output);

foreach ($newsData as $article) {
    echo '<article>' . $article['title'] . '</article>';
}

Poznámka: Při volání z PHP přímo (bez HTTP requestu) se data do endpointu předávají přes $_get nebo $_post globály.


Z Frontend JavaScript (s middleware)

GET Požadavek

fetch('/getData/News/List?web=1&lang=cs')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error(error));

POST Požadavek

fetch('/getData/CookiesBar/updateLog?csrf=TOKEN', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        oldToken: 'abc123',
        data: 'value'
    })
})
.then(response => response.json())
.then(data => console.log('Success:', data))
.catch(error => console.error('Error:', error));

Tvorba Datového Endpointu

Datové endpointy jsou umístěny v app/DATA/ a mají přístup k:

  • $_get, $_post – Interní volání z PHP (vytvořené localGet())
  • $_GET, $_POST – HTTP requesty (standardní PHP superglobals)
<?php
declare(strict_types=1);

use Petrovo\Data;

// Logika pro získání dat
$result = [
    'status' => 'success',
    'data' => [
        'id' => null,
        'name' => null,
    ]
];

return Data\outputJson($result);

Přístup k Parametrům

Staré řešení (přímý přístup):

// Přímý přístup na $_get / $_post s fallback
$id = $_get['id'] ?? null;
$name = $_post['name'] ?? null;

Nové řešení (helper funkce):

use function Petrovo\Data\param;

// Používání param() - priorita: $_post → $_POST → $_get → $_GET
$id = param('id');
$name = param('name');

// S default hodnotou
$page = param('page', 1);
$limit = param('limit', 20);

Všechny parametry najednou:

use function Petrovo\Data\params;

// Kombinace všech dostupných parametrů
$params = params();  // array merge($_GET, $_get, $_POST, $_post)

Kdy používat které řešení:

  • Používej param() a params() v nových endpointech
  • Staré endpointy mohou zůstat se starým přístupem
  • param() pracuje konzistentně v obou případech (HTTP i interní volání)

Příklad: CRUD Endpoint

<?php
declare(strict_types=1);

use Petrovo\Database\DB;
use function Petrovo\Data\outputJson;
use function Petrovo\Data\param;

// GET - vrací seznam
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $web = param('web');
    $lang = param('lang');

    $news = DB::results(
        "SELECT id, title, content FROM news WHERE web = ? AND lang = ? ORDER BY created DESC",
        [$web, $lang]
    );

    return outputJson(['status' => 'success', 'data' => $news]);
}

// POST - vytváří nový
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $title = param('title', '');
    $content = param('content', '');
    $web = param('web');

    if (!$title) {
        return outputJson(['status' => 'error', 'message' => 'Title required'], 400);
    }

    DB::query(
        "INSERT INTO news (title, content, web) VALUES (?, ?, ?)",
        [$title, $content, $web]
    );

    $id = DB::var("SELECT LAST_INSERT_ID()");

    return outputJson([
        'status' => 'success',
        'message' => 'Created',
        'data' => ['id' => $id]
    ], 201);
}

Shrnutí Volání

Typ volání Middleware CSRF RateLimit Whitelist Příklad
Admin PHP Ne Ne Ne Ne Data\get('News/List')
Frontend tagy Ne Ne Ne Ne Data\post('News/_latestThree', $data)
Frontend JS Ano Ano Ano (20/60) Ano fetch('/getData/CookiesBar/updateLog?csrf=...')