Url - Příklady použití
Language handling
Parsování URI s jazykem
use Petrovo\Url;
// V app/bootstrap.php (během inicializace)
$uri = $_SERVER['REQUEST_URI'];
// Odeber jazyk z URI a definuj LANG
$uri = Url\defineRemoveLangFromUri($uri);
// Teď máš:
// - LANG = 'cs' (nebo jiný jazyk)
// - $uri = '/kontakt' (bez jazykového prefixu)
Přechod mezi jazyky
use Petrovo\Url;
$currentUri = '/cs/kontakt';
// Přepni na angličtinu
$englishUri = Url\changeLangUri('en', $currentUri);
// vrací: '/en/contact' (pokud je slug přeložený)
// Přepni na franštinu
$frenchUri = Url\changeLangUri('fr', $currentUri);
// vrací: '/fr/contact'
Ověření jazyku
use Petrovo\Url;
$uri = '/cs/stranka';
// Je v URI jazyk?
if (Url\isLangInUri($uri)) {
echo "Ano, je tam jazyk";
} else {
echo "Není tam jazyk";
}
// Je konkrétní jazyk validní?
if (Url\isLangInGet('cs', false)) {
echo "Čeština je povolená";
}
URL creation
Interní odkazy
use Petrovo\Url;
// V šabloně nebo kódu
$url = Url\create('kontakt');
// Výsledek: '/kontakt' (default jazyk)
// nebo '/cs/kontakt' (pokud LANG='cs' a není default)
$url = Url\create('/o-nas');
// Výsledek: '/o-nas'
$url = Url\create('/cs/produkty');
// Výsledek: '/cs/produkty'
Externí URL
use Petrovo\Url;
// Webové stránky
$url = Url\create('https://example.com'); // 'https://example.com'
$url = Url\create('www.google.com'); // 'https://www.google.com'
// Speciální protokoly
$url = Url\create('mailto:info@example.com');
// 'mailto:info@example.com'
$url = Url\create('tel:+420123456789');
// 'tel:+420123456789'
// JavaScript
$url = Url\create('javascript:alert("Hello")');
// 'javascript:alert("Hello")'
Anchory
use Petrovo\Url;
$url = Url\create('#kontakt'); // '#kontakt'
$url = Url\create('#formular'); // '#formulář'
Admin URL
use Petrovo\Url;
// Pokud je ADMIN = true, automaticky přidá URL_APP_ADMIN
$url = Url\create('uzivatele');
// Výsledek (v adminu): 'https://example.com/ADMIN/uzivatelé'
// Výsledek (na webu): 'https://example.com/uzivatelé'
Slug translation
Práce se slugy
use Petrovo\Url;
$path = '/cs/kontakt-na-nas/formulář';
// Extrahuj první segment
$slug = Url\slugFromPath($path);
// vrací: 'kontakt-na-nas'
// Získej překlad slugu
$translated = Url\slugForLang('contact', 'en');
// Volá API: GET /getData/Slugs/slug?slug=contact&lang=en&web=WEB
// vrací: 'contact' nebo přeložený slug
Náhrada slugu v URI
use Petrovo\Url;
// SLUG konstanta musí existovat:
// define('SLUG', [
// 'slug' => 'kontakt',
// 'languages' => [
// 'en' => 'contact',
// 'fr' => 'contact'
// ]
// ]);
$newUri = Url\changeSlug('en', '/cs/kontakt');
// vrací: '/en/contact' (pokud SLUG obsahuje 'kontakt' → 'contact')
$newUri = Url\changeSlug('en', '/kontakt');
// vrací: '/contact' (bez jazykového prefixu)
Redirection
Jednoduché přesměrování
use Petrovo\Url;
// Stránka se přesunula
if (!$page) {
Url\redirect('/nova-stranka'); // 301 Moved Permanently
}
// Dočasné přesměrování
Url\redirect('/temp-stranka', 302);
// Bez parametru = redirect domů
Url\redirect(''); // -> '/'
Ověření existence URL
use Petrovo\Url;
// Kontrola zdrojové stránky
$externalUrl = 'https://example.com/api';
if (Url\urlExists($externalUrl)) {
// API je dostupné
$data = file_get_contents($externalUrl);
} else {
// API není dostupné
Url\redirect('/error'); // Přesměruj na error stránku
}
Error handling
404 stránka
use Petrovo\Url;
// Pokud stránka neexistuje
if (!$pageExists) {
die(Url\show404());
}
// Nebo v routeru:
return Url\show404();
Automaticky:
- Nastaví PAGE = '404'
- Vykreslí app/templates/404.tpl
- Vrací HTML
Utility
Standardizace cesty
use Petrovo\Url;
$path = Url\addLeadingSlash('kontakt');
// vrací: '/kontakt'
$path = Url\addLeadingSlash(' slozka ');
// vrací: '/slozka' (trim + slash)
$path = Url\addLeadingSlash('/produkty');
// vrací: '/produkty' (už má slash)
Bezpečná definice konstant
use Petrovo\Url;
// Definiuj bez rizika přepsání
Url\defineConstant('LANG', 'cs');
Url\defineConstant('LANG', 'en'); // Nedělá nic – LANG zůstane 'cs'
Url\defineConstant('PAGE', 'home');
Url\defineConstant('PAGE', 'contact'); // Nedělá nic – PAGE zůstane 'home'
Bootstrap příklad
Typické nastavení v app/bootstrap.php:
<?php
use Petrovo\Url;
use function Petrovo\Database\init as initDb;
$uri = $_SERVER['REQUEST_URI'] ?? '/';
$uri = parse_url($uri, PHP_URL_PATH);
// 1. Extrahuj jazyk a definuj LANG
$uri = Url\defineRemoveLangFromUri($uri);
// 2. Definuj DEFAULT_LANG z CONFIG
Url\defineConstant('DEFAULT_LANG', CONFIG['defaultLang'] ?? 'cs');
// 3. Inicializuj DB
initDb();
// 4. Najdi a spusť routu
$route = findRoute($uri);
if (!$route) {
die(Url\show404());
}
// ... pokračování ...
Typické chyby
Špatné: Vytvoření URL bez create()
// Špatně – nerespektuje LANG a settings
$url = '/kontakt?id=123';
Správně: Používej create()
use Petrovo\Url;
// Správně – respektuje jazyk, admin, atd.
$url = Url\create('kontakt?id=123');
Špatné: Redirect bez exit
// Špatně – kód pokračuje po redirect()
Url\redirect('/nova-stranka');
echo "Toto se nikdy nevypíše";
Funkce redirect() má atribut #[NoReturn] – skript se automaticky ukončí!
Správně: Přímé volání
use Petrovo\Url;
// Správně
if (!$found) {
Url\redirect('/home');
}
Souhrn - co si zapamatovat
- Language handling –
defineRemoveLangFromUri(),changeLangUri() - URL creation –
create()je tvůj nejlepší přítel - Redirection –
redirect()vždy ukončí skript - 404 –
show404()vrací HTML - Validace –
isLangInUri(),isLangInGet() - Slug translation –
changeSlug(),slugForLang() - Utility –
addLeadingSlash(),urlExists() - Constants –
defineConstant()je bezpečná