Berselang 6 bulan pada 3 Maret 2020 Laravel 7 dirilis. Karena versinya sudah menjadi versi 7, artinya versi ini adalah versi yang Break Backward Compatibility (BBC). Ada banyak fitur baru pada Laravel7, dan yang paling menarik menurut saya adalah Laravel Airlock. Layak Upgrade!

Laravel Airlock

Laravel Airlock menyediakan autentifikasi yang ringan dan mudah untuk Single Page Application (SPA), mobile application, and simple-token-based-APIS. Airlock bekerja dengan mengenerate beberapa API tokens untuk masing-masing user. Token ini diberikan dengan scopes (lingkup) yang berbeda yang dapat anda tentukan sendiri.

Blade Component Tags and Improvements

Blade Components telah dipermak untuk memungkinkan adanya tag-based rendering, manajemen attribut, component classes, inline view component, dan lainnya. Secara ringkas component disini mirip seperti component di React atau widget di Yii2. Sebagai contoh adalah component yang bernama alert yang didefinisikan seperti berikut.

<?php

namespace App\View\Components;

use Illuminate\View\Component;

class Alert extends Component
{
    /**
     * The alert type.
     *
     * @var string
     */
    public $type;

    /**
     * Create the component instance.
     *
     * @param  string  $type
     * @return void
     */
    public function __construct($type)
    {
        $this->type = $type;
    }

    /**
     * Get the class for the given alert type.
     *
     * @return string
     */
    public function classForType()
    {
        return $this->type == 'danger' ? 'alert-danger' : 'alert-warning';
    }

    /**
     * Get the view / contents that represent the component.
     *
     * @return \Illuminate\View\View|string
     */
    public function render()
    {
        return view('components.alert');
    }
}

Selanjutnya buat tampilan view untuk component tersebut seperti di bawah ini.

<!-- /resources/views/components/alert.blade.php -->

<div class="alert {{ $classForType }}" {{ $attributes }}>
    {{ $heading }}

    {{ $slot }}
</div>

Selanjutnya component dapat dipanggil pada blade view (contohnya layout) dengan menggunakan component's tag seperti berikut.

<x-alert type="error" class="mb-4">
    <x-slot name="heading">
        Alert content...
    </x-slot>

    Default slot content...
</x-alert>

HTTP Client

Pada Laravel7 ini dihadirkan Guzzle HTTP Client yang sudah di wrapper di Laravel7. Dengan HTTP Client maka API Call (dan lainnya) akan lebih mudah dan tentunya lebih sesuai dengan cara Laravel.

Route Model Binding Improvements

Route Model Binding di Laravel 7 ditingkatkan agar penggunaan Laravel untuk API menjadi lebih mudah. API tanpa Controller menjadi lebih nyaman dan tentunya pengembangan aplikasi akan lebih cepat (alhail Lumen). Beberapa peningkatan pada Route Model Binding diantaranya:

Key Customization

Laravel 7 memungkinkan anda untuk menggunakan column selain id untuk digunakan pada Route Model Binding. Contoh paling umum yaitu menggunakan slug seperti di bawah ini.

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

Automatic Scoping

Pada kasus yang lebih banyak kita seringkali membuat route yang menambahkan Model kedua yang juga memiliki hubungan dengan Model pertama. Sebagai contoh route disusun dengan menggunakan konvensi posts dan user relationship. Penggunaan route model binding yang dapat digunakan seperti di bawah ini.

use App\Post;
use App\User;

Route::get('api/users/{user}/posts/{post:slug}', function (User $user, Post $post) {
    return $post;
});

 

Pada contoh di atas harap diingat bahwa User harus memiliki relationship yang dinamakan posts yang akan menampilkan Model Post.

Multiple Mail Drivers

Laravel 7 memungkinkan anda menggunakan lebih dari satu Mail Drivers. Perubahan BBC pada Mail ini ditujukan untuk mendukung Multiple Mail Drivers. Untuk menggunakan mailer dengan driver spesifik maka dapat menggunakan contoh seperti di bawah ini.

Mail::mailer('postmark')
        ->to($request->user())
        ->send(new OrderShipped($order));

 

Test from Artisan

Peningkatan kali ini sebenarnya sangat simpel, jika sebelumnya kita harus mengeksekusi test melalui phpunit pada vendor, pada Laravel 7 test dapat dilakukan langsung dari artisan dengan menggunakan perintah di bawah ini.

php artisan test

Selain perubahan di atas beberapa perubahan yang patut juga anda perhatikan diantaranya:

  • Costum Eloquent Casts
  • Fluent String Operations
  • Route Caching Speed Improvement
  • CORS Support
  • Query Time Cast
  • MySQL 8_ Database Queue Improvements
  • Markdown Mail Template Improvements
  • Stub Costumization

Dengan hadirnya Laravel 7 sepertinya Laravel 6 Series harus segera diubah agar up-to-date dengan pembaharuan terbaru (mampus gw). Semoga bermanfaat dan Happy Coding!