Tu esi akistatyje su iššūkiu, Routing objektiškai orientuotoje PHP programoje atitinkamai atvaizduoti? Routing yra centrinė kiekvienos Webanwendung dalis, nes jis nusprendžia, kaip įeinančios URL atitinka tinkamus logikos blokelius, kitaip tariant, kontrolerius ir jų veiksmus. Šis vadovas padės tau suprasti ir įgyvendinti Routing procesą PHP, peržiūrint kontrolerių ir veiksmų priskyrimą išsamiai.

Svarbiausi įžvalgos

  • Routing leidžia priskirti įeinančius URL užklausas specifinėms kontrolerio metodams.
  • Kontrolerių ir metodų pavadinimai atitinka tam tikras pavadinimų konvencijas, kad užtikrintų nuoseklumą.
  • Su PHP Reflection galima patikrinti, ar specifinė kontrolerio metodas egzistuoja, prieš ją kviečiant.
  • Parametrai turi būti kruopščiai apdoroti ir perduoti atitinkamoms metodams asociatyviame masyve.

Žingsnis po žingsnio vadovas

Žingsnis 1: Sukurkite katalogo struktūrą ir vardų sritį

Visų pirma, sukurkite naują katalogą pavadinimu Controller, kuriame laikysite savo kontrolerio klases. Šiuo atveju svarbu, kad klasės būtų patalpintos į prasmingas vardų sritis. Pavyzdžiui:

Maršrutizavimas objektiniame PHP žiniatinklio programavime

Toliau turite apibrėžti vardų sritį kontroleriui. Tai gali atrodyti taip:

namespace Controller;

Žingsnis 2: Apibrėžkite kontrolerio klasę

Šiame žingsnyje sukursite klasę savo pageidaujamam kontroleriui. Pavadinkime ją UploadController. Tam reikės kelių pagrindinių nustatymų, kad klasių inicializuoti. Pavyzdžiui:

Maršrutizavimas objektinio orientavimo PHP tinklo programavime

Šiuo atveju turėtumėte užtikrinti, kad visi kontrolerių pavadinimai būtų formuoti mažosiomis raidėmis, kad būtų išvengta vėlesnių painiavos. Tai ne tik padeda organizuoti, bet ir leidžia išlaikyti standartizavimo procesą savo programoje.

Žingsnis 3: Sukurkite kontrolerio instanciją

Dabar sukurkite savo kontrolerio instanciją. Tai paprastai vyksta per String formatavimą, kuris apima pilną klasės pavadinimą – junto vardų sritį. Pavyzdžiui:

Maršrutizavimas objektinio orientavimo PHP tinklo programavime

Norint, kad tai būtų lengviau įgyvendinti vėlesnėje logikoje, patikrinkite, ar klasė egzistuoja, prieš eidami toliau. Tam naudojate paprastą if klausimą, kad patvirtintumėte klasės egzistavimą.

Žingsnis 4: Išimtis, kai trūksta kontrolerių

Jei kontroleris neegzistuoja, geriausia sukelti išimtį. Šiuo atveju naudokite InvalidArgumentException, kad vartotojui būtų pateikta aiški informacija, kad nurodytas kontroleris yra nežinomas:

Routing objektyviai orientuotoje PHP interneto programavimo srityje

Čia galėtumėte pateikti, pavyzdžiui, tokį pranešimą:

Kontroleris nežinomas: [Kontrolerio-pavadinimas]

Žingsnis 5: Pasikartojantys parametrai kontrolerio veiksmui

Kitame žingsnyje kalbama apie tai, kaip apibrėžti veiksmus ir jų metodus kontroleriui. Šiame pavyzdyje nustatome, kad yra metodas pavadinimu save, kuris yra atsakingas už įkėlimą. Tam jūs nurodysite PHP, kad ši metodą šiek tiek integruotų į kontrolerį. Tai vyksta per String formatavimą, panašiai kaip su kontroleriais:

Routing objektiškai orientuotoje PHP žiniatinklio programavime

Taip užtikrinate, kad išoriniai kvietimai būtų priimami tik iš įgaliotų veiksmų metodų.

Žingsnis 6: Veiksmų metodų tikrinimas per Reflection

Norint užtikrinti, kad nurodytas metodas egzistuoja, dabar naudojama PHP’s Reflection. Tai vyksta per ReflectionClass instanciją.

Routing objektiniu PHP interneto programavime

Čia tikrinate su hasMethod metodu, ar pageidaujama veiksmo metodas tikrai egzistuoja jūsų kontroleryje:

$reflection = new ReflectionClass($controllerClass);
if (!$reflection->hasMethod($actionName)) { throw new Exception("Veiksmas '$actionName' neegzistuoja kontroleryje");
}

Žingsnis 7: Parametrų prieigos logika įgyvendinkite

Po to, kai nustatyti kontroleriai ir veiksmai, atėjo laikas apdoroti įeinančius parametrus. Šie parametrai paprastai pasirodo URL segmento pavidalu ir turi būti padalinti į poras. Tam naudosite explode() funkciją:

Maršrutizavimas objektinio orientavimo PHP interneto programavime

Šiame žingsnyje taip pat turite užtikrinti, kad parametrų skaičius būtų lygus. Jei taip nėra, parametrų skaičius yra netinkamas – tokiu atveju vėl rekomenduojama naudoti InvalidArgumentException:

if (count($parameters) % 2!= 0) { throw new InvalidArgumentException("Netinkamas parametrų skaičius");
}

Žingsnis 8: Sukurkite asociatyvų masyvą parametrams

Kitame žingsnyje paverskite parametrus asociatyviu masyvu, kad galėtumėte juos lengvai perduoti veiksmui. Tai galite įgyvendinti per ciklą, kuris tiksliai priskiria kiekvieną raktą ir reikšmę:

Routing objektinio orientavimo PHP interneto programavime

Šiuo atveju paimkite pakaitomis raktus ir reikšmes, kad atliktumėte priskyrimus, prieš perduodami galutinį masyvą savo kontrolerio metodui.

Žingsnis 9: Kviečiamas kontrolerio veiksmas

Dabar tapo praktiška: esate pasiruošę kviečiant kontrolerio metodą su atitinkamais parametrais, kuriuos anksčiau apibrėžėte. Tam instancijuojate kontrolerį ir kviečiate metodą taip:

$controllerInstance = new $controllerClass();
$controllerInstance->$actionMethod($paramsArray);
Routing objektyviai orientuotoje PHP žiniatinklio programavime

Įsitikinkite, kad pabaigoje visos būtinos procedūros buvo tinkamai atliktos. Dabar sėkmingai įgyvendinote routing savo PHP programoje.

Santrauka

Šiame tekstiniame vadove išmokote, kaip įgyvendinti routing per kontrolerius ir veiksmus objektiškai orientuotoje PHP programoje. Pradedant nuo katalogų struktūros iki kontrolerių ir jų metodų apibrėžimo ir tikrinimo bei parametrų tvarkymo – visa tai suteikia jums galingą routing sistemą jūsų web programai.

Dažnai užduodami klausimai

Kaip įgyvendinti routing PHP?Routing organizuojamas priskiriant URL kontroleriams ir jų veiksmų metodams.

Kas yra kontroleriai PHP?Kontroleriai yra klasės, kurios valdo logiką, kaip apdoroti užklausas ir kviečia atitinkamus veiksmų metodus.

Kaip galiu užtikrinti, kad veiksmo metodas egzistuoja?Naudokite PHP Reflection, kad patikrintumėte, ar metodas yra atitinkamoje kontrolerio klasėje.

Kaip apdoroti URL parametrus?Parametrai turėtų pasirodyti lyginiais poromis ir gali būti paversti į asociatyvų masyvą naudojant explode().

Kas nutiks, jei mano kontroleris neegzistuoja?Turėtumėte išmesti atitinkamą išimtį, kad parodytumėte, kad kontroleris nežinomas.