Skip to content

Url - Příklady použití

Language handling

Parsování URI s jazykem

use Petrovo\Url;
use function Petrovo\I18n\validLanguages;

// V app/bootstrap.php (během inicializace)
define('LANG', Url\defineLangFromSource(validLanguages()) ?? DEFAULT_LANG);
$_SERVER['REQUEST_URI'] = Url\removeLangFromUri($_SERVER['REQUEST_URI']);

// Teď máš:
// - LANG = 'cs' (nebo jiný jazyk, výchozí DEFAULT_LANG)
// - REQUEST_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 v URI

use Petrovo\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 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\I18n\validLanguages;
use function Petrovo\Database\init as initDb;

// 1. Detekuj a definuj LANG z URI nebo POST
define('LANG', Url\defineLangFromSource(validLanguages()) ?? DEFAULT_LANG);

// 2. Odeber jazyk z URI pro routy
$_SERVER['REQUEST_URI'] = Url\removeLangFromUri($_SERVER['REQUEST_URI']);

// 3. Inicializuj DB
initDb();

// 4. Najdi a spusť routu
$route = findRoute($_SERVER['REQUEST_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

  1. Language handlingdefineLangFromSource(), removeLangFromUri(), changeLangUri()
  2. URL creationcreate() je tvůj nejlepší přítel
  3. Redirectionredirect() vždy ukončí skript
  4. 404show404() vrací HTML
  5. ValidaceisLangInUri()
  6. Slug translationchangeSlug(), slugForLang()
  7. UtilityaddLeadingSlash(), urlExists()
  8. ConstantsdefineConstant() je bezpečná