Skip to content

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')