Belajar Laravel : Apa yang baru dari Laravel 5.5?

Beberapa hari yang lalu berita baik datang dari salah satu PHP framework kesukaan penulis yaitu Laravel dengan dirilisnya versi yang paling baru yaitu 5.5

Berita baik tidak sampai di rilis versi terbaru saja tapi versi 5.5 ini adalah versi LTS (Long Term Support) melanjutkan versi LTS sebelumnya yaitu Laravel versi 5.1.

Buat kalian yang tidak tahu apa itu LTS, LTS berarti versi ini akan mendapatkan support yang lebih lama yaitu  perbaikan bug selama dua tahun, dan perbaikan keamanan selama tiga tahun. Sedangkan pada versi yang bukan LTS seperti versi 5.2 dan 5.3 hanya menerima dukungan perbaikan bug selama 6 bulan, dan perbaikan keamanan selama satu tahun.

Kembali lagi ke topik yang mau kita bahas yaitu apa saja sih yang baru di Laravel versi 5.5 ini? Setelah saya coba install dan baca-baca maka inilah fitur-fitur menarik dari laravel 5.5

1. Whoops Package

Selamat datang lagi buat Whoosp erros! Whoops package ini berfungsi untuk menampilkan pesan saat terjadi error pada kode di dalam aplikasi Laravel. Jika kalian pengguna Laravel di versi 4, maka tentu tidak asing lagi dengan pesan berupa “Whoops something error” . Package ini sangat membantu  saat terjadi error karena akan menampilakn informasi tentang error tersebut secara lengkap dan detail

2. Collection Dumping

Pernah memakai helper dd() ?  Nah sekarang kamu bisa menggunakan helper ini langsung di object collectiondalam bentuk method ->dd() . Langsung saja lihat contohnya di bawah ini:

<?php
Song::all()
    ->filter
    ->platinum
    ->dump()
    ->filter(function ($song) {
        return $song->released_on >= CarbonCarbon::parse('-10 years');
    })->dd();

3. The Responsable Interface

Maksudnya apa sih Responsable interface? Jadi di laravel 5.5. kamu bisa membuat class response sendiri untuk masing-masing object. Kita lihat aja contohnya agar lebih mudah mengerti.

public function store(Request $request)
{
    $data = request()->validate([
        'title' => 'required',
        'artist' => 'required',
        'description' => 'required',
        'duration' => 'required|numeric',
        'released_on' => 'required|date_format:Y-m-d',
        'gold' => 'boolean',
        'platinum' => 'boolean',
    ]);
    $song = new Song($data);
    $song->save();
    return new NewSongResponse($song);
}

Nah bisa dilihat di bagian return new NewSongResponse($song); agak sedikit berbeda dangan cara biasa kita melakikan return di laravel versi sebelumnya.

Jadi jika kita biasanya langsung memanggil helper response(), sekarang kita bisa membuat sebuah response class sendiri untuk masing-masing object. Lalu apa isi dari class NewSongResponse tersebut?

<?php
namespace AppHttpResponses;
use AppSong;
use IlluminateContractsSupportResponsable;
class NewSongResponse implements Responsable
{
    /**
     * @var AppSong
     */
    protected $song;
    /**
     * @param AppSong $song
     */
    public function __construct(Song $song)
    {
       $this->song = $song; 
    }
    public function toResponse($request)
    {
        if ($request->wantsJson()) {
            return response()
                ->json($this->song)
                ->header('Location', route('songs.show', $this->song))
                ->setStatusCode(201);
        }
        return redirect()
            ->route('songs.show', $this->song);
    }
}

Bisa kita lihat di bagian toResponse, Jika request berupa ajax maka otomatis responsenya berupa json, jika request biasa maka akan di return berupa redirect. Dengan adanya Responsible interface maka isi dari controller akan menjadi semakin rapi. 

4. Request Validation Method

Jika sebelumnya untuk melakukan validasi di controller kita memanggil method $this->validate() sekarang bisa langsung melakukan validasi dari request object. Contohnya seperti di bawah ini.

$data = request()->validate([
    'title' => 'required',
    'artist' => 'required',
    'description' => 'required',
    'duration' => 'required|numeric',
    'released_on' => 'required|date_format:Y-m-d',
    'gold' => 'boolean',
    'platinum' => 'boolean',
]);

5. Custom Validation Rule Objects and Closures

Fitur selanjutnya ini sangat membantu kita untuk membuat sebuah rule validasi kustom dimana biasanya kita membuat sebuah rule baru dengan mengextend dari class Validator berupa Validator::extend. Sekarang cara membuat sebuah rule baru menjadi lebih clear, sangat elegant dan mudah. Contoh cara membuat validasi rule baru dapat dilihat di contoh di bawah.

<?php
namespace AppRules;
use IlluminateContractsValidationRule;
class CowbellValidationRule implements Rule
{
    public function passes($attribute, $value)
    {
        return $value > 10;
    }
    public function message()
    {
        return ':attribute needs more cowbell!';
    }
}

Dari contoh di atas, cara memakai custom validation yang sudah dibuat diatas seperti dibawah ini:

<?php
 
request()->validate([
    'cowbells' => [new CowbellValidationRule],
    'more_cowbells' => [function ($attribute, $value, $fail) {
        if ($value <= 10) {
            $fail(':attribute needs more cowbell!');
        }
    }]
]);

Selain lewat object, kamu juga bisa langsung membuat custom rule dengan clousure. Seperti contoh rule more_cowbells di atas. Clousure ini sangat membantu kita untuk membuat validasi yang simple tanpa harus membuat class dulu atau digunakan untuk membuat prototype custom role sebelum memindahkannya kedalam sebuah class. Fitur yang sangat keren!

6. Blade::if ,Auth dan juga Guest Blade Directives

Di laravel 5.5 diperkenalkan sebuah blade baru yaitu Blade::if yang digunakan untuk menyimplekan fungsi if else di dalam blade template kamu. Cara untuk menambahkan custom blade directive adalah dengan menambahkan beberapa code baru di AppServiceProvider::boot()method.

use IlluminateSupportFacadesBlade;
 
Blade::if('admin', function () {
    return auth()->check() && auth()->user()->isAdmin();
});

Cara memangilnya akan jadi seperti di bawah ini.

@admin
    <a href="{{ route('super.secret') }}">Secret Page</a>
@else
    Welcome Guest. <a href="{{ route('login') }}">Login</a>
@endadmin

Keren banget! Eits, tapi ada tambahan lagi yaitu blade Auth dan Guest yang sudah disediakan laravel secara default untuk menghandle apakah si user itu login atau tidak.

Cara menggunakan blade Auth & Guest seperti berikut.

@auth
    Welcome {{ user()->name }}!
@endauth
 
@guest
    Welcome Guest!
@endguest

7. Frontend Presets

Fitur selanjutnya yang tidak kalah keren adalah soal frontend presets. Secara default, laravel menyediakan frontend berupa Vue.js. Namun sekarang kamu bisa memilih apakah mau menggunakan vue atau react atau tanpa ada frontend framework  di aplikasi kalian.

Caranya adalah dengan memanggil command preset lewat artisan seperti contoh di bawah ini.

php artisan help preset
Usage:
  preset <type>
Arguments:
  type    The preset type (none, bootstrap, vue, react)
# Use react
$ php artisan preset react
# Clear scaffolding
$ php artisan preset none

8. Automatic Package Discovery

Fitur yang satu ini tidak kalah keren juga teman-teman. Sesuai namanya, fitur ini memberikan kemudahan kita saat menginstall package di dalam aplikasi laravel yang sedang kita buat dengan secara otomatis tanpa harus menambahkan Provider dan Aliias di file app.php. Karena biasanya kita suka lupa kan setelah menginstall package tapi lupa menambahkan Provider dan Aliasnya. Tapi kamu juga bisa mendisable fitur automatic ini untuk beberapa package.

Itulah fitur-fitur terbaru yang ada di dalam Laravel 5.5, Jika kalian mau upgrade versi laravel sebelumnya ke laravel 5.5 wajib baca dulu upgrade guidenya di situs laravel supaya tidak ada error ya. Selamat mencoba laravel 5.5

Referensi : 

https://laravel-news.com/laravel-5-5https://laravel.com/docs/5.5

Please follow and like us:

Hi, Saya Agus Yusida

Hello, perkenalkan saya Agus Yusida, seorang freelancer programmer, pernah membuat startup dan suka mencoba hal-hal baru. Jika ada pertanyaan bisa DM saya di IG @yusidajohn untuk fast respond. Jangan lupa like facebook ngide.net ya!

Related Article