Právě dnes oficiálně vyšla nová verze Laravel 7. Jedná se o další hlavní verzi, která vychází každý půl rok. Nejedná se o LTS verzi, takže Laravel nabízí podporu na následujících šest měsíců pro fixování bugů, tedy do 3. září 2020 a také roční podporu pro fixování security fixů, tedy do 3. března 2021. Pojďme se podívat, co nová verze Laravel 7 přináší.

Co je nového v Laravel 7

  • Laravel Airlock
  • Zttp pro HTTP klienta
  • CORS podporu
  • Vlastní Eloquent Cast
  • Fluent String Operations
  • Blade X
  • Query Time Casts

Vylepšení v Laravel 7

  • Jednodušší route model binding
  • Až dvakrát rychlejší routy
  • Vylepšení mailových šablon v markdownu

Laravel Airlock

Laravel Airlock je oficiální autentizační balíček pro SPA (Single Page Application) nebo jednoduchou API. Nabízí využívat a pracovat s autentizačním tokenem, především pak zjednodušuje práci pro mobilní aplikaci. Více informací najdete v oficiální dokumentaci.

Zttp pro HTTP klienta

Zttp je nová vrstva nad Guzzle od Adama Wathana. Nabízí mnohem hezčí syntaxi pro 90% případů Guzzle, kdy potřebujete pouze přes POST poslat JSON na endpoint. Jak jsem už ale psal, nejedná se o nového klienta, ale pouze o UX/DX vrstvu nad Guzzle, kdy se nebude přidávat moc velká logika. Pokud tedy potřebujete robustní nebo komplikovanou logiku, pak raději použijte přímo Guzzle.

Post request:

<?php
use Illuminate\Support\Facades\Http;

$response = Http::post($url);

$response = Http::post($url, [
    'name' => 'Laravelblog',
]);

Get request:

$response = Http::get($url);
$response = Http::get($url,['foo'=>'bar']);

Odpovědi:

$response['foo']
$response->body()
$response->json()
$response->status()
$response->ok()

CORS podpora

Laravel 7 nyní podporuje CORS (Cross-Origin Resource Sharing) out-of-the-box. Během API vývoje vývojář často naráží na CORS problém a proto je nyní možné využít HandleCors middleware, který se o vše postará.

Vlastní Eloquent Cast

Další velkou novinkou je možnost mít vlastní Eloquest casting. Mějme například vlastní JSON caster:

<?php

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

class Json implements CastsAttributes
{
    public function get($model, $key, $value, $attributes)
    {
        return json_decode($value, true);
    }

    public function set($model, $key, $value, $attributes)
    {
        return json_encode($value);
    }
}

Ten pak můžeme využít v našem modelu:

<?php

namespace App;

use App\Casts\Json;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    
    protected $casts = [
        'extra' => Json::class,
    ];
}

Fluent String Operations

Díky možnosti řetězení stringových operací můžeme ještě lépe pracovat s metodami třídy Illuminate\Support\Str:

$currentVersion = (string) Str::of('  Laravel 6.x ');
return $currentVersion->trim()
        ->replace('6.x', '7.x')
        ->slug();

// laravel-7x

Blade X

Laravel 7 převzal myšlenku z Vue.js a nabízí možnost vytvořit samostatnou komponentu včetně controlleru, který bude za ní "zodpovědný" - tedy určuje jaký obsah se má vygenerovat a jaké data jí můžeme předat.

Query Time Casts

Pomocí metody withCasts() lze hodnotu rovnou změnit v query:

$users = User::select([
    'users.*',
    'last_posted_at' => Post::selectRaw('MAX(created_at)')->whereColumn('user_id', 'users.id')
])
->withCasts(['last_posted_at' => 'date'])
->get();

Jednodušší route model binding

Defaultně route model binding funguje pouze s id polem. To lze ale nyní jednoduše změnit:

Route::get('posts/{post:slug}', function (App\Post $post) {
    return $post;
});

Až dvakrát rychlejší routy

Laravel 7 zahrnuje novou metodu pro porovnání zkompilovaných a zakešovaných rout, které byly zakešovány pomocí příkazu route:cache. Ve větší aplikaci (například v aplikaci s 800 a více rout) může toto vylepšení vyústit v až dvakrát rychlejším načtení požadavku. Žádné změny v aplikaci nejsou potřeba.

Vylepšení mailových šablon v markdownu

Vychozí markdown šablona pro mail byla upravena a vypadá tak lépe s využitím barevné palety z Tailwind CSS.

Více v dokumentaci

Jedná se o výčet těch nejdůležitějších novinek v Laravel 7. Pro kompletní seznam navštivte oficiální dokumentaci, včetně návodu pro upgrade. Nebo využijte Laravel Shift pokud se nechcete o nic starat. Na Laracastu také vychází nová série o novinkách v Laravel 7.