Stojíš před výzvou, Routing v objektově orientované PHP aplikaci odpovídajícím způsobem znázornit? Routing je klíčovou součástí každé webové aplikace, protože určuje, jak jsou příchozí URL přiřazovány k odpovídajícím logickým blokům, tedy kontrolerům a jejich akcím. Tento návod ti pomůže pochopit a implementovat proces routingu v PHP tím, že podrobně projdeme přiřazení kontrolerů a akcí.
Nejdůležitější poznatky
- Routing umožňuje přiřazení příchozích URL požadavků k specifickým metodám kontrolerů.
- Názvy kontrolerů a metod se řídí určitými konvencemi pojmenování, aby bylo zajištěno jednotnost.
- S pomocí PHP Reflection se může ověřit, zda specifická metoda kontroleru existuje, než bude zavolána.
- Parametry musí být pečlivě zpracovány a předány odpovídajícím metodám v asociativním poli.
Průvodce krok za krokem
Krok 1: Vytvoření struktury adresářů a prostoru názvů
Nejprve vytvoříš nový adresář pojmenovaný Controller, ve kterém uložíš své třídy kontrolerů. Je důležité třídy uspořádat do smysluplných prostorů názvů. Například:

Dalším krokem je definovat prostor názvů pro kontroler. Může to vypadat následujícím způsobem:
Krok 2: Definování třídy kontroleru
V tomto kroku vytvoříš třídu pro svůj požadovaný kontroler. Nazvěme ho UploadController. Budeš potřebovat několik základních nastavení k inicializaci třídy. Například:

Přitom bys měl zajistit, že všechny názvy kontrolerů jsou formátovány malými písmene, abys předešel následným zmatkům. To nejenže pomáhá přehlednosti, ale také ti umožňuje udržovat standardizační proces ve tvé aplikaci.
Krok 3: Vytvoření instance kontroleru
Teď vytvoříš instanci svého kontroleru. To se obvykle provádí pomocí formátování řetězce, které zahrnuje úplný název třídy – včetně prostoru názvů. Například:

Aby to mohlo být jednoduše implementováno v další logice, zkontroluj, zda třída existuje, než pokračuješ s dalšími kroky. K tomu použiješ jednoduché if prohlášení, které ověřuje existenci třídy.
Krok 4: Ošetření výjimek při chybějících kontrolerech
Pokud kontroler neexistuje, je vhodné vyvolat výjimku. V tomto případě použij InvalidArgumentException, abys uživateli jasně sdělil, že zadaný kontroler je neznámý:

V tomto případě bys mohl například vypsat upozornění jako:
Kontroler neznámý: [Název-kontroleru]
Krok 5: Sdílené parametry pro akci kontroleru
V dalším kroku je důležité definovat akce a jejich metody pro kontroler. V tomto příkladu stanovíme, že existuje metoda s názvem save, která je zodpovědná za nahrávání. Přitom pověřuješ PHP, aby tuto metodu trochu integrovalo do kontroleru. To se děje pomocí formátování řetězce, podobně jako u kontrolerů:

Tímto zajišťuješ, že externí volání jsou akceptována pouze od autorizovaných metod akčních.
Krok 6: Ověření akční metody pomocí Reflection
Aby bylo zajištěno, že uvedená metoda existuje, je nyní využita PHP Reflection. To se děje instanciací ReflectionClass.

Zde ověřuješ pomocí metody hasMethod, zda požadovaná akční metoda skutečně existuje ve tvém kontroleru:
Krok 7: Implementace logiky přístupu k parametrům
Jakmile jsou kontrolery a akce stanoveny, je čas zpracovat příchozí parametry. Tyto parametry se obvykle objevují ve formě segmentu URL a musí být rozděleny na páry. K tomu použiješ funkci explode():

V tomto kroku musíš také zajistit, aby byla počtem parametrů sudá. Pokud tomu tak není, existuje neplatný počet parametrů - i zde je doporučována InvalidArgumentException:
Krok 8: Vytvoření asociativního pole pro parametry
V dalším kroku převedeš parametry na asociativní pole, abys je mohl snadno předat akci. To můžeš realizovat pomocí smyčky, která cíleně přiřadí každý klíč-hodnotový pár:

Přitom střídavě vezmeš klíče a hodnoty, abys provedl přiřazení, než předáš konečné pole své metodě kontroleru.
Krok 9: Volání akce kontroleru
Teď to bude praktické: Jsi připraven zavolat metodu svého kontroleru s odpovídajícími parametry, které jsi předtím definoval. K tomu instancuješ kontroler a zavoláš metodu takto:

Ujisti se, že na závěr byly všechny potřebné kroky správně provedeny. Nyní jsi úspěšně implementoval routing ve své PHP aplikaci.
Souhrn
V tomto textovém návodu jsi se naučil, jak můžeš implementovat routing pomocí kontrolerů a akcí v objektově orientované PHP aplikaci. Začínaje strukturou adresářů, přes definici a ověření kontrolerů a jejich metod až po zpracování parametrů - to vše ti umožňuje vytvořit výkonný routingový systém pro tvou webovou aplikaci.
Často kladené otázky
Jak implementuji routing v PHP?Routing je organizován přiřazením URL k kontrolerům a jejich akčním metodám.
Co jsou kontrolery v PHP?Kontrolery jsou třídy, které řídí logiku pro zpracování požadavků a volají odpovídající akční metody.
Jak mohu zajistit, že akční metoda existuje?Použij PHP Reflection, aby ses ujistil, že metoda je ve správné třídě kontroleru dostupná.
Jak zpracovávám URL parametry?Parametry by se měly objevovat ve sudých párech a mohou být pomocí explode() převedeny na asociativní pole.
Co se stane, pokud můj kontroler neexistuje?Měl bys vyvolat odpovídající výjimku, aby bylo uvedeno, že kontroler je neznámý.