Url - Příklady použití
Language handling
Přechod mezi jazyky
use Core\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 v URI
use Core\Url;
$uri = '/cs/stranka';
// Je v URI jazyk?
if (Url\isLangInUri($uri)) {
echo "Ano, je tam jazyk";
} else {
echo "Není tam jazyk";
}
URL creation
Interní odkazy
use Core\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 Core\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 Core\Url;
$url = Url\create('#kontakt'); // '#kontakt'
$url = Url\create('#formular'); // '#formulář'
Admin URL
use Core\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 Core\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 Core\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 Core\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 Core\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 Core\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 Core\Url;
$path = Url\addLeadingSlash('kontakt');
// vrací: '/kontakt'
$path = Url\addLeadingSlash(' slozka ');
// vrací: '/slozka' (trim + slash)
$path = Url\addLeadingSlash('/produkty');
// vrací: '/produkty' (už má slash)
Bootstrap příklad
Detekce jazyka a stripping prefixu probíhá přímo v app/bootstrap.php — bez pomocných funkcí, čtení superglobalů explicitně na hranici:
use function Core\I18n\validLanguages;
$_validLangs = validLanguages();
preg_match('#/(' . implode('|', $_validLangs) . ')/#', $_SERVER['REQUEST_URI'], $_match);
$_lang = $_match[1] ?? ($_POST['lang'] ?? '');
LangContext::setLang(in_array($_lang, $_validLangs, true) ? $_lang : LangContext::defaultLang());
if ($_match) {
$_SERVER['REQUEST_URI'] = preg_replace('#' . $_match[0] . '#', '/', $_SERVER['REQUEST_URI'], 1);
}
unset($_validLangs, $_match, $_lang);
Typické chyby
Špatné: Vytvoření URL bez create()
// Špatně – nerespektuje LANG a settings
$url = '/kontakt?id=123';
Správně: Používej create()
use Core\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 Core\Url;
// Správně
if (!$found) {
Url\redirect('/home');
}
Souhrn - co si zapamatovat
- Language handling –
changeLangUri() - URL creation –
create()je tvůj nejlepší přítel - Redirection –
redirect()vždy ukončí skript - 404 –
show404()vrací HTML - Validace –
isLangInUri() - Slug translation –
changeSlug(),slugForLang() - Utility –
addLeadingSlash(),urlExists()