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=cs→app/DATA/News/List.php/getData/CookiesBar/updateLog?csrf=TOKEN→app/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()aparams()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=...') |