Právě vyšel Laravel 7
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.