Építsd meg a php symfony keret a komponensek
Tetszik PHP-fejlesztő, a legvalószínűbb, hogy meg kellett küzdenie Symfony. Nos, legalább már hallott róla. Amit nem lehet tudni -, így ez a tény, hogy a Symfony lényegében egy sor különböző könyvtárak, az úgynevezett alkatrészeket. amelyek önmagukban semmilyen PHP alkalmazás.
Például egy népszerű Laravel keret került kifejlesztésre segítségével több Symfony komponenst. Ebben az útmutatóban fogjuk használni őket. A következő változata a népszerű CMS Drupal is alapul néhány főbb összetevői Symfony.
Itt nézd meg, hogyan kell felépíteni egy kis PHP keretrendszer használatával ezek az összetevők, és azok hogyan hatnak létre az alapvető szerkezete olyan webes alkalmazás.

Megjegyzem, hogy ebben a cikkben nem fogok beszélni minden Symfony alkatrészek és képességeiket. Azt fogja mondani, csak a legfontosabb dolgok, amelyek szükségesek ahhoz, hogy építsenek egy minimálisan működésének keretét. Ha azt szeretnénk, hogy vizsgálja meg a komponensek a Symfony - Azt javasoljuk, hogy a dokumentációt.
hozzon létre egy projektet
Kezdjük a nulláról egy egyszerű index.php fájlt a gyökér a projekt, és állítsa be a függőségek fogja használni a zeneszerző.
Ebben a szakaszban a mi fájl tartalmazza az egyszerű kódot:
Ez a kód csak le a kért URL-töredék (amit a $ _SERVER [ „PATH_INFO”]) megfelelő echo. Ez nagyon, nagyon egyszerű router.
komponens HttpFoundation
HttpFoundation szerepet tölt be a magas szintű absztrakciók dolgozó HTTP adatfolyam. A legfontosabb annak belépési pontok kérés és válasz osztályok.
Request lehetővé teszi, hogy működjön együtt a HTTP kérés információkat, mint a kért URI vagy ügyfél fejléc, épül a PHP szuperglobális tömbök ($ _GET. $ _POST., Stb.) Válasz elküldésére használjuk a HTTP fejléc és az adatok az ügyfél, hanem a szabványos fejléc és a visszhang. mivel ez lenne a „klasszikus” PHP.
Állítsa a zeneszerző:
Ez a parancs elhelyezi az alkatrész és a könyvtár az eladóval. Most írja be ezt a kódot az index.php fájlban:
Mit tettünk itt nem valami különleges:
- Készítsen egy másolatot a kérelmet a statikus módszer createFromGlobals. Ahelyett, hogy hozzon létre egy üres objektumot, kitölti a Request objektum adatok aktuális kérés;
- Mi ellenőrizze a kapott értéket getPathInfo módszerrel.
Azt is helyettesítheti a visszhang szerkezet használni a válasz objektum tárolja a kimenő adatok, és használja a küldési módszert küldeni a választ a kliens (ami valójában eltávolítja a fejléc és tartalmát a kimeneti puffer).
HttpKernel használni, mint egy wrapper az alapvető keretet
Abban a pillanatban, már a legegyszerűbb esetben - az egész logikája a keret a mi front controller - az index.php fájlt. Ha azt akarjuk, hogy adjunk több kód, akkor jobb, hogy elkülönüljön a másik osztályba, melyik lesz a „mag” a mi keret.
HttpKernel komponens csak fogant erre a célra. Úgy tervezték, hogy a HttpFoundation, Request objektum átalakul egy tárgyat válasz, továbbá számos olyan osztályok elérése érdekében ezt a célt. Most fogjuk használni HttpKernelInterface. Az interfész meghatározza egyetlen módszer: kezelni.
Ez a módszer a érveit Request objektum. és előírja, hogy a visszatérés a tárgy válasz. Annak érdekében, hogy minden osztályt, amely megvalósítja ezt a felületet képes kezelni a kérelmet kér. és visszatér a válasz válasz.
Hozzunk létre az osztály Core keretet, amely megvalósítja HttpKernelInterface felület. Készítsen core.php fájl lib / keret könyvtárba.
Megjegyzés. fogantyú módszer is úgy két argumentuma van: a kérés fajtája és logikai érv azt jelzi, hogy a kernel kell dobni egy kivételt, ha hiba történik. Ebben a cikkben nem fogjuk használni őket, de meg kell, hogy végre egy eljárás pontosan abban a formában ahogy le van írva HttpKernelInterface felületen. különben PHP hibát dob.
Az egyetlen dolog, hogy mi volt ebben a részben - át a kódot kezelni a módszert. Most lehet megszabadulni ezt a kódot az index.php. és helyette az újonnan létrehozott osztály:
Továbbfejlesztett routing rendszer
A mi osztály még mindig van egy probléma: ő is kezeli az útvonal az egész alkalmazást. Ha szükséges, adjunk hozzá egy új URL-t, meg kell változtatni a kódot keretein belül ez egyáltalán nem jó ötlet. Továbbá szükség lenne hozzá egy új eset a blokkok minden új útvonalat. Nem, biztosan nem akar menni ezen a csúszós lejtőn.
A megoldás az, hogy adjunk keretében routing rendszer. Megteheti ezt a módszert létrehozni térképet. URI, amely leképezi a bezárása PHP, amely lehet végrehajtani, ha az URI egyezik az útvonal.
Most a útvonalak közvetlenül hozzá lehet adni az első vezérlő:
Mi szükség van egy rugalmas és hatékony routing rendszer, ezért azt kell használni a Routing komponenst.
Segítségével Routing komponens lehetővé teszi számunkra, hogy át Route tárgyak (járat) UrlMatcher. amely összehasonlítja a kért URI megfelelő útvonalat. Útvonal Ez az objektum tartalmazhat az attribútumok, amelyek segítenek elvégezni a szükséges része az alkalmazás. Ebben az esetben, egy ilyen objektum tartalmaz áramkört, amelyet meg kell végrehajtani, ha a egybeesése az útvonal. Továbbá, minden dinamikus paramétereket tartalmazott URL jelen lesz az attribútumokat az útvonal.
Annak érdekében, hogy e rendszer végrehajtásához van szükség ahhoz, hogy a következő módosításokat:
- cserélje útvonalak tömb például RouteCollection. tárolni a útvonalakon;
- változtassa meg a térképen eljárás logika úgy, hogy regisztrált Route Például ebben a gyűjteményben;
- UrlMatcher létrehozunk egy objektumot, és mondja el, hogyan kell keresni útvonalak megfelelő URI a továbbított, megadva a megfelelő kontextusban, RequestContext objektumot.
mérkőzés módszer megpróbálja megtalálni a megfelelő útvonalat az átadott egy URL-t, és ha sikeres lesz visszatérni a megfelelő útvonal attribútumokat. Ellenkező esetben kivételt dob ResourceNotFoundException. hogy mi lehet fogni, és megjeleníti a 404 oldalt.
Most már használhatja a routing alkatrész kezeléséhez bármilyen paramétert. Miután megszabadulni a vezérlő attribútum, akkor hívja bármely áramkörben, átadva a paramétereket érvek (a call_user_func_array funkció):
Most könnyedén kezeli a dinamikus URL-t:
Vegyük észre, hogy itt mi csinálunk valami nagyon hasonló ahhoz, amit csinál, akik szeretnének a Symfony: bemutatjuk az URL paramétereket a kívánt kontroller.
Mi beavatkozni keretében a munkafolyamat
Symfony keretrendszer is nyújt számos lehetőséget, hogy bemutassuk a kérés életciklusának, és változtassa meg. Jó példa erre egy biztonsági réteggel, lehallgató és kérheti, hogy megpróbálja elérni a védett URL-t.
Mindez annak köszönhető, hogy a EventDispatcher komponenst. lehetővé teszi a különböző alkalmazás-összetevők egymással kommunikálni végrehajtása a megfigyelő tervezési minta.
Középpontjában ez az összetevő a EventDispatcher osztály, amelyet aláírásukkal előfizetők az egyes események. Amikor az igazgató az eseményről értesítést okozta összes ismert előfizetők ezt az eseményt. Előfizető lehet bármilyen megfelelő visszahívási függvény vagy módszer.
Ismerd meg ezt a viselkedést tudjuk, hozzátéve diszpécser tulajdon. amelyben tárolni a EventDispatcher objektumot. valamint az eljárás. amely kötődik az esemény, hogy visszatérjen a PHP függvény hívásával. A menedzser fogjuk használni regisztrálni a visszahívási funkciót, és ezt követően az események keretében.
Most lehetősége van arra, hogy regisztrálja előfizetők egyszerű callback függvények. Most nézzük levelet eljárás tüzet. amely azt mondja, a vezérlő, hogy értesíteni kell a minden előfizetője általa ismert, hogy van valami esemény.
Kevesebb, mint tíz sornyi kódot adtunk egy jó esemény a feldolgozó rendszer keretében, illetve mindez köszönhetően a EventDispatcher komponenst.
küldő módszer is egy má- sodik - az esemény objektumot. Minden esemény örökölt az általános osztály Event. és úgy lett kialakítva, hogy tárolja kapcsolatos bármely információ az esemény.
Írjunk egy osztály RequestEvent eseményeket. amely azonnal esedékessé amint keretében feldolgozza a kérelmet. Természetesen, ez az esemény számára hozzáférést kell biztosítani a jelenlegi kérést, felhasználva olyan tulajdonság, amely tárolja az aktuális példányt a kérés.
Most add kódot kezelni egy ilyen eljárás, hogy létrehoz RequestEvent esemény minden alkalommal, amikor megkapja a kérést.
Így az összes előfizetők az esemény lesz hozzáférése RequestEvent objektumot. valamint kérése az aktuális példányt. Abban a pillanatban, hogy nem írt ilyen előfizető, de könnyen elképzelhető egy felvezető, hogy mielőtt a fő kód ellenőrzi, hogy a korlátozott hozzáférést a kért URL-t.
Ez egy egyszerű biztonsági rendszer, de akkor észre mindazt, amit szeretnék, mert most már a lehetőséget, hogy beavatkozzon a keretében a munkafolyamat bármikor, ami nagyban növeli a képességeit.
következtetés
Ebben a cikkben, akkor láthatjuk, hogy Symfony alkatrészek kiváló önálló könyvtárak. Sőt, lehet, hogy kölcsönhatásba lépnek egymással, hogy együtt egy keretet, amely megfelel az Ön igényeinek. Még mindig sok alkatrészek, amelyek kétségtelenül nagyon érdekes - például DependencyInjection vagy biztonsági elemek.
Természetesen a teljes méretű keretek, mint a Symfony vagy Laravel használja ezeket a komponenseket teljes egészében saját képességeit annak érdekében, hogy hozzon létre egy hatékony eszköz, amely most rendelkeznek.

Által nyújtott információk útján két csatorna (látás és hallás) a képzés hatékonyságának sokkal jobb tanulás könyvekből. A házi feladatok és online tesztek lehetővé teszi, hogy folyamatosan úgy gondolja, a célnyelven, és azonnal ellenőrizze tudását!


Ha azt szeretnénk, hosszú ideig, hogy tanulmányozzák, hogyan lehet HTML-t, akkor engem, mert van jó hír!

Ha már megtanulta a HTML és tovább szeretne lépni, a következő lépés az lesz, hogy tanulmányozza a CSS technológiával.

Ha azt szeretnénk, hogy megértsék a fogalmak domain és tárhely, megtanulják, hogyan kell létrehozni egy adatbázist, feltölteni a fájlokat a honlapon keresztül FTP szerver, hozzon létre aldomain konfigurálja a postaládákat a helyszínen, és ellenőrzi a részvétel, a tanfolyam kifejezetten az Ön számára!