SlideShare a Scribd company logo
Laravel 4 – Jövő a jelenben
Zoltán Borsos – Software Engineer @ Habostorta
A fejlesztőről, bemutatás
• 4. főverzió (2013 Május)
• Készítő: Taylor Otwell (Egy .NET fejlesztő)
• CI fejlesztéssel kezdte
• Hiányosságok gyors felfedezése
• Új célok kitűzése
• Első Laravel release
A kitűzött célok
• Kimagaslóan olvasható kód
• Tesztelhetőség
• Szükséges eszközök biztosítás (auth, form…)
• S.O.L.I.D irányelvek terjesztése
• Könnyű fejlesztés és kiterjesztés
Miért hozott új szemléletet?
• Composer csomagokból épül fel
• Tervezési minták magas fokú használata
• Facade pattern alkalmazása
Route::get()
Event::subscribe()
Mire épül?
Mire épül? - Illuminate
• Egy fedőréteg
• Egységes interfész a különböző csomagok felett
• Egységesítési irányelvek
• Egyszerűen karbantartható, konzisztens
Artisan
• A symfony console komponensre épül
• Csak parancssori eszköz
• Mindenképpen szükséges konzol elérés
Egy request életciklusa
Request
Route
Controller
Model
View
Start fájlok
Eventek
Filterek
Az MVC réteg
• Modellek – Eloquent
• Blade template processor
• Több típusú kontroller
Routing
• Restful és resource típusú kontrollerek
• Routok csoportosítás
• Prefixek és suffixek támogatás, csoportokra is
• Route filterek
• Alap típusok, GET, POST, PATCH…
• Restful route-ok halmozása
Controllerek
• Restful kontrollerek
• Resource kontrollerek
• Minden kontroller a BaseController-ből származik
• Megosztott logika a BaseControllerbe kerül
Migrációk és seederek
• Adatbázisszerkezet verziókezelése
• A SchemaBuilder része
• Csak „Artisan”-al futtatható
Eloquent
• SoftDelete használata
• „Accessor” és „Mutator” függvények
• Kapcsolatok
• „Eager-Loading”
Eloquent - Példakódok
Blade
• Öröklődés, szekciók
• Vezérlési szerkezetek
• viewComposerek
• Jól elválasztja a controller és a prezentálási logikát
Blade - példakód
Dependency Injection
Dependency Injection II.
Unit tesztelés
• PHPUnit alapú tesztelés
• Egyedi TestCase osztály ami megoldja a teljes boot
folyamatot
• Sok egyéb teszt framework létezik hozzá
• A facede pattern miatt egyszerű az „object mocking”
Kódolási stílusok
• PSR-1 és PSR-2
• Megfelelő kommentezés használata
• Irányelvek
Kérdések, kérések?
Mit adhatok? 
Köszönöm a figyelmet!

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
Marius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
Expeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
Pixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
marketingartwork
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
Skeleton Technologies
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
SpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
Christy Abraham Joy
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
Vit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
MindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Laravel4 - Jövő a jelenben

Editor's Notes

  1. A 4-es verzió minden téren megújulást hozott Otwellnél a CI fejlesztés gyorsan átcsapott egy óriási core módosítássá Ami miatt kijött az összes hiányosság, majd ezután meghatározta az új célokat Amivel megalkotta az első Laravel frameworköt
  2. A kódolvashatóság volt az első megfogalmazott cél, mivel otwell gyűlölte hogy néha több időt kell tölteni más kódjának kibogarászásával mint a probléma megoldásával A ásodik az hogy az elkészült alkalmazás a lehető legkisebb energia befektetéssel teljes körűen tesztelhető legyen A CI-hez hasonlóan átemelt bizonyos komponenseket amik a mindennapi munkához elnegedhetelenek. Autentikáció, form helper stb… Mivel Otwell egy .NET fejlesztő ezért nagyobb hangsúlyt fektetett a különbőző irányelvek betartására is, ami miatt az elkészült kód magas-fokúan újrahasznosítható
  3. A composer egy dependency management eszköz, könnyű és egyszerű módja a kód dependenciáinka meghatározására, letöltésére és kezelésére Otwell erősen támaszkodik a tervezési mintákra a fejlesztés során és így biztatja a fejlesztőket arra hogy ők is próbálják meg minél jobban szervezni a kódjaikat Az egyik kiemelt és talán elsőre furcsának tűnő minta a faced „pattern”. A lenti két kód úgy néz ki mintha egy-egy osztály statikus metódusait hívnánk meg, miközben a háttérben egy DI konténerből kerülnek ki az objektumok és a php __callStatic() magic metódusát használva hívja meg az adott osztályok adott függvényeit, amit megint kiemelnék hogy nem statikus típusúak.
  4. Az előző dián látható csomagok nem a framework dependenciái, hanem az „Illuminate/*” csomagoké. A framework önmagában az illuminat csomagokra támaszkodik Ezáltal ezeket a csomagokat csak közvetetten használják. Ez egy jó taktika, mivel ha megszűnne egy csomag akkor sem kell kétsége esni, a fedőréteg átalakítható hogy egy új hasonló funkcionalitású csomagot támogasson, ezáltal a fedőréteg felett, ahol mi dolgozunk, minden változatlan maradhat. Könynen karbantartható
  5. A symfony „console” komponensére épülve készült el az „Artisan” nevű parancssori eszköz. A használathoz szükségünk van közvetlen konzol hozzáférésre, mivel például ezen az eszközön keresztül használhatjuk az adatbázis migrációt illetve kezelhetjük a queue-ban felgyűlt job-okat is. Ez az eszköz csak parancssorból működik, bár lehetőség van a parancsok kódból való meghívására is, de ez alapvetően egyáltalán nem támogatott, és ami a legfontosabb, kicsit sem biztonságos.
  6. Alapvetően a request folyamatát három részre oszthatjuk Boot folyamat (Amikor bejön a request, beregisztrálódnak az autoloaderek és létrejön a laravel Application osztálya) Boot után (Application létrejötte, service providerek regisztrálás, environment detektálás) Dispatch (Routing, before filterek, Route actionök meghívása, Response összeálíltása és kiküldése, Shutdown callbackek meghívása VÉGE) Láthatjuk hogy elég masszív a folyamat, de ahhoz képest az erőforrásigénye igen kicsi és a folyamat nagyon könnyen bővíthető és rugalmas
  7. Miből épül fel a Laravel MVC rétege Az első az Eloquent nevű ORM rendszer. Egy nagyon gyors és egyszerű módja az adatbázisok kezelésének A kontrollerekre bővebben kitérek a következő diákon, mert több fajta kontroller is létezhet A blade template rendszer teljesen eltérő a smarty-tól, a legtöbb újdonság amit egy fejlesztő várhat megvan benne, szekciók kezelése, vezérlési szerkezetek stb… Szintaktikailag inkább a Twig-re hasonlít
  8. A RESTful routing miatt nagyon egyszerű, szabványos API-k léterhozása A Routing lehetőséget ad csoportosításra, így gyorsan fűzhetünk például prefixeket adott URL-ekhez, úgy hogy a kódot minimálisan kell módosítanunk Filterek használata, amik adott route elérése előtt vagy után futnak le, lehetőséget adnak így tisztogatása, vagy jogosultság ellenőrzésre A router megengedi hogy bizonyos helyekre csak akkor rutoljuk ha megfelelő fejléccel ellátott HTTP kérés érkezik be A RESTful routokat lehetőség van halmozni, így képes arra hogy több kontroller épüljön egymásra
  9. A RESTFUL kontrollerek csak az adott HTTP Verb actionöket tartalmazzák és mást nem is lehet elérni Létezik generátor eszköz ilyen kontrollerek létrehozására (beépített) Fontos hogy az összes típusú kontroller a BaseController nevű osztályból származik ezáltal helyből, bármilyen core turkálás nélkül létrehozni megosztott logikát
  10. Lehetőséget ad arra hogy az adatbázisunk szerkezetét verziókezeljük A verziók között bármikor lehetőség van ugrálni, rollbackelni stb… A SchemaBuilder osztállyal építhető fel a teljes adatbázis szerkezet, a PHP-t mintegy leíró nyelvként használva a MySQL-hez. Jegyezzük meg hogy ez a rész a rendszernek csakis a „Artisan”-al futtatható
  11. A „softDelete” egyfajta törlési mehanizmus, amikor az adott modelhez tartozó táblában léterjön egy „date_deleted” oszlop. Ennek az alapértelmezett értéke NULL, amennyiben tartalmaz egy dátumot az adott rekordot az eloquent nem fogja listázásnál és semmilyen műveletnél figyelembe venni, hacsak ezt nem kérjük külön Az accessor függvényekkel lehetsőgünk van olyan metódusokat definiálni amik az adott modell egy property-jét lekérve egy valamilyen formában módosított rekordot ad vissza. Ilyenre lehet példa hogy mondjuk egy felhasználó nevének lekérdezésénél mindig nagybetűsíti azt. Az eloquent kezeli az összes táblák között fellépő kapcsolatot, és a polimorfikus kapcsolatokat is. Fontos megjegyezni hogy az eloquent nem táblák között hanem modellek között állít fel kapcsolatot. Az Eager-loading egy betöltési mehanizmus, amikor modjuk egy adott blogbejegyzéshez tartozó kommentet mindig külön kérünk le, hanem egy ilyen objektumot úgy kapunk meg hogy az összes hozzá kapcsolat objektum adatát tartalmazza.
  12. Itt láthatunk példát keresésre, létrehozásra és módosításra is Lekérdezésnél lehetőségünk van úgy keresni hogy meghívjuk az adott osztály withSoftDelete() metódusát ami a softDeleted rekordok között is keres A léterhozást egy üres objektummal zajlik és az objektum tulajdonságainak beálíltásával módosíthatóak a mezők értékei A visszatérési érték általában nem egy tömb hanem egy példány az Illuminate/Support/Collection osztályból Lehetőség van tömbre alakítani az adott clollection-t a Collection soztály toArray() metódusának meghívásával
  13. A rendszer támogatja a legalapvetőbb öröklődési logikát, beágyazásokat és van jópár helper függvénye is Ilyen helperek például a @lang és a @choice A vezérlisi szerkezetek nagyon könnyen kezelhetőek, inkább hasonlítanak a php for() ciklusához mint mondjuk egy smarty-ban. Könnyen kiterjeszthető
  14. A konténer célja hogy eltávolítsa a „hard-coded” osztályok dependenciáját a kódból. A függőségek kezelése a példányosításkor történik ami egyszerű lehetőséget ad a függőségek gyors cseréjére Nem csak az előre beregisztrált osztályokat érhetjük el természetesen hanem, mi is regisztrálhatunk be osztályokat a konténerbe
  15. Természetesen ez nem elég, lehetséges hogy egy megvalósításhoz több implementáció is tartozik, és szeretnénk valamikor kicserélni a kettőt. Nyilván egy alkalmazásban nem kis fejtörést Okoz mondjuk az hogy egy MySQL implmenetációról átállítsuk a teljes rendszerünket mondjuk MongoDB-re. Szerencsére a Laravel IoC konténere lehetőséget ad arra hogy egy interfészt bindoljunk egy bizonyos implementációhoz A konténert persze több helyen is használhatjuk, ha például egy event listenert akarunk regisztrálni akkor a függvény nem csak konkrét osztályokat vagy egy closure-t fogad el hanem egy nevet is ami létezik a konténerben. Ha sok bindingot használunk akkor lehetőség van létrehozni egyedi serviceProvider-t ami tartalmazza az alkalmazásunk összes bindingját és minden egyéb regisztrációt amit a boot folyamat során el kell végezni.
  16. A tesztelés teljesen a PHPUnit-ra alapszik A tesztek egyszerűen létrehozahtók az app/tests mappában A tesztek futtatása alatt az envireonment mindig „testing”-re állítódik át. A route filterek ki vannak kapcsolva a unit teszt során Több féle test-framework létezik, például a codeception, vagy a behate. Ezekkel nem csak unit hanem például funkcionális teszteket is futtathatunk. Akár selenium támogatással, ami jóval bővebb lehetőséget nyújt.
  17. PSR-1 és PSR-2. Biztos sokan vagyunk akik hatalmas vitát tudnának csapni a fügvények és vezérlési szerkezetek után álló kapcsos zárójelek helyéről. Szerencsére ezt az említett Standardok elég jól lekötik. Szerencsére ez nem köti meg a fejlesztő kezét. Sokan elfelejtik hogy ez nem a fejlesztő kezét köti meg hanem a publikálás formátumát. A legjellemzőbb az hogy van két kódolási stílus beállítva az IDE-k automatikus igazítására. Amikor hozzá akarunk nyúlni a kódhoz egy pillanat alatt áttfutatjuk rajta azt ami olyanna várázsolja ami a mi stílusunk, majd még egy kattintássál publikálás előtt a standardnek megfelelő formátumra alakítjuk. Fontos kiemelni hogy a kommentezés nem csak a visszatérési érték megadásából áll hanem egy rövid de átfogó szövegből is, ezenfelelül sokan nem tudják hogy a docBlock ennél jóval többre használható, soztályoknál megadható a szerző, verzió, a módosítás ideje, az hogy melyik verzióban mi változott. Szóval ezeket is érdemes használni és mondjuk egy phpDocumentor által generált dokumentáció máris több lesz mint szimpla API dokumentáció Beszéltem a SOLID irányelvekről, és a tesztelésről, most nézzük meg hogy miért is lehetetlen ez valójában. Amíg az ember magának fejleszt egy projektet, sok szabadidejét rááldozza, mert tökéleteset szeretne alkotni addig nem ütközünk akadályba, amikor viszont arról van szó hogy egy megrendelőnek vagy egy cégnek dolgozunk akkor már, pénzről beszélünk nem időről. Általában ezek betartása annyi plussz időt jelent hogy senki sem látja a befektetése megtérülését. Leginkább akkor látnák amikor valami komolyabb probléma lép fel, vagy egy komolyabb új funkció lefejlesztését kérik, de ekkor már rég késő. És sajnos az elmondottak a tesztelésre is igaz.
  18. - Kérdések,kérések. QA rész.
  19. - Kérdések,kérések. QA rész.