Kako izgraditi osnovni sustav usmjeravanja na strani poslužitelja u PHP-u.

Preuzeo Aaron Sekisambu

U kontekstu web aplikacije na strani poslužitelja, sustav usmjeravanja je dio web aplikacije koji preslikava HTTP zahtjev u upravitelja zahtjeva (funkcija / metoda). HTTP zahtjev sastoji se od zaglavlja i opcionalno tijela. Zaglavlje sadrži informacije o zahtjevu, na primjer, metodu, put i host. Neke metode poput GET, HEAD i OPTIONS ne koriste tijelo zahtjeva dok druge poput POST, PUT i PATCH koriste za prijenos podataka s klijenta na poslužitelj.

Korištenje sustava usmjeravanja omogućava nam da strukturiramo našu aplikaciju na bolji način, umjesto da svaki zahtjev datoteci označavamo.

Sustav usmjeravanja funkcionira tako što preslikava HTTP zahtjev na obrađivača zahtjeva na temelju metode zahtjeva i putanje navedene u URL-u zahtjeva. To je upravo ono što ćemo graditi u ovom udžbeniku.

Zahtjevi.

  • Trebate PHP verzije 5 ili novije verzije na svom razvojnom stroju.
  • Osnovna znanja o PHP-u, uključujući poznavanje globalnih varijabli PHP-a.
  • Razumijevanje objektno orijentiranog PHP-a.

Odricanje.

  • Ovaj usmjerivač će obraditi samo GET i POST zahtjeve.
  • Neću koristiti maštovite alate i knjižnice. Nema skladatelja, nema automatskog utovara. Želim se usredotočiti na koncept.
  • Ispitivanje jedinice je sjajno, ali ja to neću učiniti, kako bih ovaj vodič držao kraćim. (Oprostite dobri programeri)
  • Kod koji ću napisati nije proizvodni kod.

Započnimo.

Pomoću terminala stvorite mapu za projekt i CD u mapu.

$ mkdir php-router
$ cd php-router

Stvorite 4 datoteke u mapi kao što je prikazano u nastavku.

$ touch index.php Request.php IRequest.php Router.php

index.php - Ovo je ulazna datoteka za web aplikaciju. Tu ćemo inicijalizirati usmjerivač i definirati naše rute. Sadrži i sav uvoz.

Request.php - Ova će datoteka sadržavati klasu Zahtjevna klasa za inicijalizaciju objekata koji sadrže podatke o HTTP zahtjevu.

IRequest.php - Ova datoteka će sadržavati sučelje koje klasa Request mora implementirati.

Router.php - Ova datoteka će sadržavati klasu usmjerivača.

Prije nego što napišemo usmjerivač, moramo osmisliti API (Kako će se koristiti u aplikacijama). Ispod je API za usmjerivač.

$ router = novi usmjerivač;
// Kako će se definirati GET zahtjevi
$ router-> get ('/ neki / ruta', funkcija ($ zahtjev) {
    // Argument $ request povratnog poziva
    // sadržavat će podatke o zahtjevu
    povratak "Sadržaj";
});
// Kako će se definirati POST zahtjevi
$ router-> post ('/ neki / ruta', funkcija ($ zahtjev) {
    // Kako doći do podataka od tijela zahtjeva
    $ body = $ request-> getBody ();
});

Sada kada smo definirali kako će se naš usmjerivač koristiti, stvarajmo ga.

Izradite klasu zahtjeva.

Prvo definirajte sučelje koje će konkretna Request klasa implementirati. U IRequest.php definirajte sučelje IRequest.

getBody () dohvaća podatke iz tijela zahtjeva. Zahtjevna klasa mora imati implementaciju za ovu metodu.

Izradite klasu zahtjeva.

U konstruktoru se pozivamo na bootstrapSelf () - metodu koja postavlja sve ključeve u globalnoj $ _SERVER matrici kao svojstva klase Request i dodjeljuje im vrijednosti. Ova metoda upućuje poziv toCamelCase () metodi.

Metoda toCamelCase () pretvara niz iz kućišta zmija u slučaj deve.

getBody () je implementacija metode definirane u sučelju IRequest.

Stvorite klasu Router.

U Router.php dodajte sljedeći kôd za usmjerivač.

U konstruktoru klase usmjerivača zadržite referencu na njezinu ovisnost - objekt Zahtjev.

Koristimo se PHP magičnom metodom __call (). Ova metoda se pokreće kada se u objektnom kontekstu pozivaju nepristupačne metode.

Razmotrite uzorak koda u nastavku.

Pokušavamo pozvati metodu get () koja nije definirana u klasi Router, pa se aktivira magična metoda __call (). Dobiva dva argumenta. Prvi argument je naziv metode ('get'), a drugi je niz argumenata koji su get () metodom prizivali i.e ['/', function () {}].

Koristimo magičnu metodu __call () kako bismo dinamički stvorili asocijativni niz koji preslikava rute na povratne pozive. Stvaramo ga za svaku podržanu metodu zahtjeva. Ako se na objektu usmjerivača poziva nevaljana metoda, mi odgovaramo s metodom 405 koja nije dopuštena.

Način rješavanja () odabire povratni poziv koji se poziva da obradi zahtjev na temelju HTTP metode i putanje zahtjeva ('/', '/ foo / bar' itd.).

Sada kada imamo svoj usmjerivač, iskoristimo ga za izradu aplikacije.

Stvorite aplikaciju.

U index.php uvežite klase Zahtjev i usmjerivač koje smo definirali, inicijalizirajte usmjerivač i definirajte neke rute.

Pokrenite i ručno testirajte aplikaciju.

Upotrijebimo razvojni poslužitelj PHP-a za pokretanje aplikacije na priključku 8000.

Dok ste u terminalu, CD u mapu projekta i pokrenite sljedeću naredbu.

$ php -S 127.0.0.1:8000

Otvorite svoj web preglednik i idite na http: // localhost: 8000 / i http: // localhost: 8000 / profile da biste testirali početnu i profilnu stranicu.

Upotrijebite poštara ili curl (ili bilo koji drugi alat po vašem izboru) za testiranje POST rute do http: // localhost: 8000 / profile.

Evo snimke zaslona mog testa pomoću poštara.

POST / podaci funkcionirajuDELETE / povrat podataka 405 Metoda nije dopuštena

Završne misli.

PHP trenutno ima slabu podršku za HTTP metode koje omogućuju slanje podataka u tijelu zahtjeva, osim POST-a (tj. PUT, DELETE, PATCH, itd.).

Morate koristiti php: // input (ulazni tok samo za čitanje) za čitanje neobrađenih podataka iz tijela zahtjeva, a zatim ih raščlaniti u parove ključ-vrijednost.

Trebate angažirati vrhunske programere? Pričaj s Andelom da ti pomogne u tome.