Laravel 7

Marcus Olsson,

Release-schemat för Laravel håller i sig och i princip exakt sex månader efter Laravel 6 släpptes så är nu version 7 ute. I.o.m. det nya versionssystemet enligt " så behöver man "bumpa" en version så snart man introducerar något nytt i ramverket som är icke-bakåtkompatibelt.

Laravel 6 är fortsatt nuvarande LTS-version.

Mycket är nytt, men för mig som dagligen jobbar i Laravel så är det främst Custom casts, Custom Keys (för URL:er) samt (väldigt stora) prestanda-förbättringar för routes som sticker ut.

Med Custom Casts så kan man enkelt och strukturerat skapa egna typer av casts för attribut på Eloquent-modeller. Bara att sätta upp en klass, definiera setters och getters och koppla på ens modell.

"Custom Keys" är även det riktigt användbart som kommer spara en lite tid och vara lite enklare att greppa. Kikar man t.ex. på ett vanligt scenario i ens routes:

1Route::get('/articles/{article}', 'ArticleController@show');
1Route::get('/articles/{article}', 'ArticleController@show');

Laravel har alltid haft ID:t som nyckel, så URL:en skulle vara t.ex. "/articles/211". Men i många fall så kanske man önskar någon form av UUID eller helt enkelt en "slug". Hittills har man fått lösa det antingen genom att definiera detta direkt i modellen:

1public function getRouteKeyName()
2{
3 return 'slug';
4}
1public function getRouteKeyName()
2{
3 return 'slug';
4}

Alternativt i t.ex. en provider:

1Route::bind('articles', function ($slug) {
2 return \App\Article::where('slug', $slug)->firstOrFail();
3});
1Route::bind('articles', function ($slug) {
2 return \App\Article::where('slug', $slug)->firstOrFail();
3});

Nu kan man istället direkt i sina routes:

1Route::get('/articles/{article:slug}', 'ArticleController@show');
1Route::get('/articles/{article:slug}', 'ArticleController@show');

Mycket snyggare och enklare.

Spana som vanligt in dokumentationen för vad som är nytt, och Laravels alltid lika tydliga "Upgrade Guide" om du funderar på att uppdatera.