Skip to content

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

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