Čo je nové v Laravel 9?

24. februára 2022

Od nového roka prešiel už vyše mesiac, a pred pár dňami sme sa konečne dočkali releasu nového Laravelu 9. Ak nepatríš do skupiny ľudí, ktorí nedočkavo očakávali tento moment a už pomaly odrátajú dni do ďalšieho vydania, v tomto článku ti načrtnem zopár bodov, pre ktoré sa oplatí zvážiť upgrade na túto novú verziu Laravelu.

 

Dôležitý bod na úvod

Nová verzia Laravelu vyždaduje využitie PHP verzie 8 a vyššej. Pokiaľ teda tvoja aplikácia beží ešte stále na ancient fialovom sloníkovi verzie 5.6, tak si pridaj do svojho zoznamu aj tento dôležitý bod (ktorý by si si mal pridať nehľadne na Laravel verziu. Oldies môžeš uznávať pri počúvaní Bronski Beatu, ale pri voľbe sotvéru nie je oldies správna voľba).

 

Obsah

  1. Routing
    1. Controller groups
    2. Nový vizuál route:list-u
    3. Scoped route bindings
  2. Migrácie – po novom anonymné triedy
  3. Nové accessors a mutators
  4. Vynovená ignition error page
  5. Blade
    1. Named slots
    2. Selected a checked direktívy
  6. Enums
    1. Enum routing
    2. Casting
  7. Full text search
    1. Index v migráciach a funkcia
    2. Laravel Scout aj bez Algolie

 

Routing

Controller groups

Táto feature je síce súčasťou posledných verzií Laravelu 8, avšak je dosť cool na to aby som ju zaradil do tohto článku. Možno si sa v minulosti stretol s tým, že medzi svojimi routes si nekonečne opakoval definíciu controlleru, ktorý mal obsluhovať dané cesty. Laravel komunita si povedala, že príslovie opakovanie je matka múdrosti už nie je in, a tak ti nový Controller route grouping ušetrí písanie a zbytočné opakovanie kódu.

 

Pred

 

Po

 

Ref: https://laravel.com/docs/9.x/releases#controller-route-groups

 

Nový vizuál route:list-u

Naoko (doslova) malinká zmena, no keď najbližšie použiješ príkaz artisan route:list, prekvapí ťa upravený vzhľad tabuľky. Podľa mňa pekná zmena.

 

Pred

 

Po

 

Scoped route bindings

Celkom strašidelne znejúci názov skrýva za sebou peknú pomôcku. Pokiaľ si v minulých verziách Laravelu zúfal pri riešení problému, ako zabezpečiť, aby cesta, ktorá sa skladá z viacerých hierarchických Eloquent modelov zobrazila len ak sedí vzájomný vzťah týchto modelov, tak už nemusíš. V ľudskej reči povedané, ak si mal cestu, ktorá obsahovala identifikátor záznamu ale zároveň aj identifkátor prislúchajúceho používateľa (napríklad), musel si využiť niektoré z nie práve intuitívnych riešení. Po novom tomu tak byť nemusí, no viac ako sto krát počuť, je jeden krát vidieť – preto si určite pozri video od Jeffreyho Waya kde je daná problematika prehľadne vysvetlená.

 

Ref: https://laravel.com/docs/9.x/releases#forced-scoping-of-route-bindings

 

Migrácie

Po novom anonymné triedy

 

Vytvoril si novú migráciu, keď v tom potrebuješ zmeniť jej názov. Na prvý pohľad drobnosť (aj na druhý) no pokiaľ je názov zložitejší, musíš meniť nie len zle čitateľný názov súboru, ale ešte aj horšie čitateľný názov danej triedy. Well, not anymore. Pre migrácie sú po novom využité anonymné triedy, a teda časť kde meníš názov triedy môžeš vynechať. Pretty neat right?

 

Pred

 

Po

 

 

Modely

Accessors a mutators

Jednou z najväčších zmien zaznamenali modely. Pre prístup alebo zadanie atribútu pre model bolo doteraz potrebné využiť nie práve elegantnú syntax:

 

 

Po novom je syntax oveľa intuitívnejšia, a funkciu môžeš pomenovať priamo názvom atribútu. Pokiaľ k tomu ešte využiješ aj named arguments, ktoré prišli v PHP 8, je to pastva pre oči.

 

Definovanie accessors a mutators po novom:

 

Pokiaľ by si mal však úchylku na túto špecifickú Laravel syntax, môžeš ďalej používať aj starý zápis.

 

Ref: https://laravel.com/docs/9.x/releases#eloquent-accessors-and-mutators

 

Errory, všade samé errory

Ako správny developer si sa doteraz pravdepodobne snažil chybám vyhýbať. Laravel však vo svojej novej verzii pripravil úplne novú Ignition error page, ktorá je tak pekná, že nejeden by sem tam spravil chybu, aby potešil svoje oko týmto pekným novým dizajnom. Žarty bokom, nová error page je nie len pekná, ale aj funkčná a umožní ti ešte lepší prehľad chyby.

 

Pred

 

Po

Ref: https://laravel.com/docs/9.x/releases#exception-page

 

Blade vychytávky

Ako veľký fanúšik templatovacieho enginu Blade nemôžem (aspoň v krátkosti) opomenúť pár nových trikov, ktoré ti určite uľahčia robotu.

 

Named slots

Mám Blade komponent a mám v ňom veľa rôznych slotov. To je super pokým nemusíš tento komponent využiť a dokola opakovať tagy slot s atribútom pre jeho meno. Nová syntax ti umožní definovať konkrétne sloty rýchlejšie a prehľadnejšie, priamo v danom názve tagu.

 

Pred

 

Po

 

Ref: https://laravel.com/docs/9.x/releases#slot-name-shortcut

 

Selected a checked direktívy

Áno áno je to drobnosť, niekto necitlivý by povedal, že aj zbytočnosť. Avšak keď budeš najbližšie písať krkolomné one-linery pre inputy, spomeň si na tento odstavec a ušetri svoje ruky (a oči) využitím tohto syntactic sugar.

 

Pred

 

Po

 

Ref: https://laravel.com/docs/9.x/releases#checked-selected-blade-directives

 

Enums

Napriek tomu, že nie som veľký fanúšik tejto dátovej štruktúry, musím uznať, že po zmenách, ktoré priniesol nový Laravel sa to možno zmení. Avšak POZOR: niektoré zo spomenutých enum trikov vyžadujú PHP 8.1

 

Enums ako parameter pre routes

Nové PHP prienieslo možnosť vytvárať enums s hodnotami a nový Laravel priniesol možnosť to streliť rovno do tvojich definícii pre routes. Celkom šikovná vecička.

 

 

Ref: https://laravel.com/docs/9.x/releases#implicit-route-bindings-with-enums

 

Casting

Zadefinovať niektorý z atribútov pre model ako enum sa možno po novom stane viac a viac populárne. Laravel túto novú PHP funkcionalitu krásne transformuje do elegantného využitia v kóde, a tak môžeš parádne využívať číselníky (ach tieto slovenské preklady) na úrovni kódu pre ich definovanie. Za mně dobrý.

 

Ref: https://laravel.com/docs/9.x/releases#enum-casting

 

Full textové vyhľadávanie, určite si už o ňom počul, možno v súvislosti NoSQL databáz, no v novom vydaní Laravel priniesol dve zmeny, ktoré sa ti zaručene môžu v budúcnosti zísť.

 

Full text index

Po novom máš pri definícii polí v databáze možnosť v migrácii pridať full textový index. Čo to znamená? Na úrovni databázy sa ti pridá index, pomocou ktorého môžeš následne full textovo vyhľadávať v danom stĺpci tabuľky. Toto hľadanie vieš potom uskutočniť pomocou funkcie whereFullText(), ktorá sa podľa databázového enginu preloží na príslušnú implementáciu.

 

 

Laravel Scout Engine

V spojitosti fráz full text search, Laravel a Laravel Scout si sa už určite stretol so službami ako Algolia alebo MeiliSearch. Pri využití Laravel Scout-u, čo je balíček pre full textové vyhľadávanie v Laraveli si musel využiť niektorú zo služieb tretích strán, ktorých príklad som spomenul. Po novom však vieš využiť aj vlastný engine priamo v Laraveli, vďaka ktorému vieš full textovo hľadať a nemusíš využiť žiadnu službu tretej strany! Toto riešenie je však vhodné iba pre menšie až stredne veľké projekty, ako uvádza aj samotná Laravel dokumentácia.

 

Ref: https://laravel.com/docs/9.x/releases#laravel-scout-database-engine

 

A čo ďalej?

Laravel 9 so sebou priniesol kopec ďalších cool fičúr ohľadom testov, validácie a mnohých iných. Bohužiaľ všetky sa do tohto článku nezmestili, avšak určite stojí za to ich vyskúšať. Neváhaj a pozri si dokumentáciu aj sám, určite z teba neubudne. Alternatívou môže byť taktiež super video od Jeffreyho Waya, zakladateľa Laracastu, kde prehľadne demonštruje viacero nových funkcionalít.

 

A keby si našiel nejaké chyby, prípadne by si mal návrhy na zlepšenie, kontaktuj nás cez niektorý z kontaktov na stránke. Ďakujem ti za prečítanie a Laravelu zdar!