Url (Práce s URL a URI)
Utility funkce pro práci s URL adresami, jazyky v URI a přesměrováním.
Klíčové konvence
1. Absolutní cesty začínají vždy /
Framework pracuje výhradně s absolutními cestami začínajícími /.
✓ Správně: '/kontakt', '/de/produkte', '/admin/uzivatele'
✗ Špatně: 'kontakt', '../stranka', 'subslozka/stranka'
Proč?
- Zjednodušuje volání v šablonách (žádné výpočty podadresáře)
- Eliminuje chyby s relativními cestami
- Konzistentní API bez výjimek
- Vhodné pro root domain i subdomény (nikoliv subdirectory)
To znamená, že Petrovo CMS se instaluje na:
- Root domény:
example.com✓ - Subdoménu:
api.example.com✓ - Nikoliv do subdirectory:
example.com/my-app✗
Pokud potřebuješ subdirectory, je potřeba upstream proxy nebo jiné řešení.
2. Default jazyk NEMÁ prefix, ostatní mají
URL struktura podle jazyků:
Default jazyk (pokud cs):
/produkty
/o-nas
/kontakt
Ostatní jazyky (2-znakový ISO prefix):
/de/produkte
/en/products
/fr/produits
Princip:
- LANG = CONFIG['defaultLang'] → URL bez jazykového prefixu
- Ostatní jazyky → URL s prefixem /[2char]/
Příklad s více jazyky (default=cs):
Česky: /produkty (bez prefixu)
Německy: /de/produkte (s /de/)
Anglicky: /en/products (s /en/)
Francouzsky: /fr/produits (s /fr/)
V kódu se to automaticky řeší:
// Funkce create() vždy vrací správný formát
Url\create('produkty');
// Pokud LANG='cs' (default) → '/produkty'
// Pokud LANG='de' → '/de/produkty'
// Pokud LANG='en' → '/en/produkty'
To znamená:
- Slug se nepřekládá pro default jazyk (zůstane 'produkty')
- Slug se překládá pro ostatní jazyky ('produkte', 'products', 'produits')