Sejak pertama kali dirilis pada pertengahan 2011, Laravel telah menjelma menjadi salah satu framework yang paling banyak digunakan secara luas. Akhir Agustus 2017 menandai 6 tahun Laravel hadir sebagai framework fullstack yang memberi kekuatan bagi puluhan ribu aplikasi web maupun API. Di saat itu pula Laravel versi 5.5 dirilis dengan membawa beragam fitur menarik. Apa saja yang baru di Laravel 5.5? Simak beberapa ulasan berikut ini.

Whoops package

Kembalinya package populer yang sempat tidak disertakan di Laravel sebelumnya ini adalah kabar baik bagi saya. Whoops menampilkan exception dengan jelas dan cantik. Laravel 5.5 menyertakan Whoops v2 yang membawa sejumlah fitur seperti mencari bantuan mengenai exception terkait di Google dan StackOverflow dengan sekali klik.

Collection Dumper

Fitur ini memungkinkan kita untuk menginvestigasi nilai dari suatu Collection secara mudah. Kode dibawah akan menampilkan isi dari Collection $pages.

    $pages = Page::all()->dumper();

Kita juga dapat menggunakan dumper ini beberapa kali seperti

$pages = Page::all()->
    ->dump()
    ->filter(function($item) {
        if ($item->id == 1) return $item;
    })
    ->dump();

Exception custom rendering and reporting

Di Lavarel 5.5, kita bisa membuat class Exception sendiri serta membuat implementasi method render dan report sesuai dengan kebutuhan kita. Dua method ini nantinya akan dieksekusi ketika exception terjadi. Method render berisi kode tentang bagaimana exception ditampilkan, sedangkan method report berisi kode untuk melaporkan exception tersebut, semisal melalui email atau menulis nya ke log

<?php namespace App\Exceptions;

class MyCustomException extends \Exception {

    public function render()
    {
        return view('error.custom');
    }

    public function report()
    {
        // send to log
        // send email
    }
}

Responsible Interface

Dengan fitur ini, kita mendapat kontrol penuh bagaimana sebuah response dibentuk dan dikembalikan di dalam class terpisah

<?php namespace App\Responses;

use Illuminate\Contracts\Support\Responsable;

class MyCustomResponse implements Responsable {

    public function __construct()
    {

    }

    public function toResponse($request)
    {
        if ($request->wantsJson()) {
            // do something here
        } else {
            return view('custom_response');
        }

        // return redirect(), etc
    }
}

Kita dapat menggunakannya di sebuah Controller seperti

<?php

namespace App\Http\Controllers;

use App\Http\Requests;
use Illuminate\Http\Request;
use App\Responses\MyCustomResponse;

class HomeController extends Controller
{
    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return new MyCustomeResponse;
    }
}

Frontend Preset

Laravel 5.5 menyediakan generator untuk beberapa frontend framework seperti bootstrap, react, dan vue.

~$ php artisan preset bootstrap|react|vue
~$ npm install

Artisan migrate fresh

Pada versi sebelumnya, Laravel telah mempunyai fitur migrate:refresh yang akan me-rollback semua migration dan menjalankankan kembali semua migration. Berbeda dengan fitur tersebut, fitur migrate:fresh ini akan langsung menghapus semua table dan menjalankan migration dari awal kembali

~$ php artisan migrate:fresh

Automatically Register New Package

Laravel 5.5 memberi kemampuan bagi sebuah package untuk terdaftar dalam service provider milik Laravel tanpa harus secara eksplisit mendaftarkannya melalui config. Umumnya kita akan melakukan hal seperti ini di Laravel versi sebelumnya

~$ composer require graham-campbell/markdown

Kemudian mendaftarkan package tersebut di config

//config/app.php

'providers' => [
    ...
    GrahamCampbell\Markdown\MarkdownServiceProvider:class,
    ...
]

'aliases' => [
    ...
    'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class,
    ...
]

Di Laravel 5.5, kita bisa mengeliminasi langkah diatas dengan sedikit modifikasi pada file composer.json milik package

    "extra": {
        "laravel": {
            "providers": [
                "GrahamCampbell\\Markdown\\MarkdownServiceProvider"
            ],
            "aliases": {
                'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class
            }
        },
    },

Other

Selain fitur baru diatas, ada beberapa fitur lainnya seperti:

  1. Select package on vendor:publish Kita dapat memilih config dari package mana yang akan dipublish
    Which provider or tag's files would you like to publish?:
    [0] Publish files from all providers and tags listed below
    [1] Provider: Illuminate\Notifications\NotificationServiceProvider
    [2] Provider: Illuminate\Pagination\PaginationServiceProvider
    [3] Provider: UxWeb\SweetAlert\SweetAlertServiceProvider
    [4] Provider: GrahamCampbell\Markdown\MarkdownServiceProvider
  2. Custom Validation Rule: Kita dapat membuat class untuk validation rule
  3. Factory-model generator: Meng-generate model beserta factory

Upgrade to Laravel 5.5

Laravel menyediakan dokumentasi yang lengkap tentang bagaimana cara upgrade dari Laravel versi sebelumnya. Secara ringkas, kita cukup mengubah beberapa bagian di composer.json

     "require": {
-        "php": ">=5.6.4",
-        "laravel/framework": "5.4.*",
+        "php": ">=7.0.0",
+        "graham-campbell/markdown": "^8.0",
+        "laravel/framework": "5.5.*",
         "laravel/tinker": "~1.0",
     },
     "require-dev": {
         "fzaninotto/faker": "~1.4",
         "mockery/mockery": "0.9.*",
-        "phpunit/phpunit": "~5.7",
+        "phpunit/phpunit": "~6.0",
         "symfony/css-selector": "3.1.*",
-        "symfony/dom-crawler": "3.1.*"
+        "symfony/dom-crawler": "3.1.*",
+        "filp/whoops": "~2.0"
     },
     "autoload": {
         "classmap": [
@@ -45,6 +47,10 @@
         "post-update-cmd": [
             "Illuminate\\Foundation\\ComposerScripts::postUpdate",
             "php artisan optimize"
+        ],
+        "post-autoload-dump": [
+            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
+            "@php artisan package:discover"
         ]
     },

Potongan kode diatas adalah hasil dari git diff pada file composer.json milik saya. Selanjutnya, kita tinggal memperbarui composer package

~$ composer update

Selesai. Mudah bukan? Selain itu, engineer termuda kami pernah membawakan materi yang serupa dalam pertemuan PHP Indonesia Bandung. Anda bisa menyaksikan sesi lengkapnya disini:

Belajar Laravel bersama Refactory? Mendaftar sekarang juga: https://enroll.refactory.id/