Ketika kali pertama fokus belajar laravel, versi laravel yang saya gunakan untuk belajar adalah laravel versi 8. Setelah belajar, saya coba implementasi ke dalam beberapa project yang saya tangani. Dan tentu saja ketika selesai project, versi laravel yang terbaru sudah rilis. Karena versi terbaru itu biasanya update dan perbaikan dari berbagai sisi, termasuk security dan perbaikan bug, tentu lebih baik untuk menggunakan versi yang terbaru. Oleh karena saya mencoba untuk upgrade versi laravel di project yang saya tangani. Sebelum upgrade langsung, saya melakukan percobaan di project sederhana dan ini akan jadi topik bahasan di artikel kali ini.

Overview

Pada percobaan kali ini kita akan mencoba untuk update versi framework laravel dari versi 8 ke versi 10 pada sample project yang sudah disiapkan. Ketika proses update, kita akan melakukan dua kali proses, yaitu

  1. Proses upgrade dari Laravel 8 ke Laravel 9.
  2. Proses upgrade dari Laravel 9 ke Laravel 10.

Goal terakhir di percobaan ini tentu saja versi laravel nya berhasil diupgrade dan project sederhana bisa digunakan.

Persiapan

Sebelum mencoba proses update versi laravel 8 ke versi laravel 10 ini, ada beberapa hal yang harus diperhatikan dan tentu harus dipersiapkan terlebih dahulu. Berikut ini adalah tools yang saya gunakan.

  1. Versi PHP yang saya gunakan ketika percobaan update ini ada dua versi yaitu versi 8.0 dan versi 8.1. Untuk proses switch versi php sudah saya tulis di postingan sebelumnya
  2. Composer versi Composer version 2.3.5
  3. Project yang akan digunakan sebagai uji coba proses update dengan Laravel versi 8.
  4. Menggunakan phpunit untuk testing di awal dan di akhir.

Sekarang kita coba cek versi php terlebih dahulu. Buka terminal, lalu run command di bawah ini.

php -v

Output ketika command di run.

PHP 8.0.30 (cli) (built: Aug 14 2023 06:42:40) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.30, Copyright (c), by Zend Technologies

Output di atas adalah versi PHP yang digunakan ketika di awal percobaan.

Sekarang kita coba clone project darai sample repositori:

https://github.com/qadrLabs/belajar-laravel-8-testing-crud-feature

Buka terminal lalu kita clone repositori ini menggunakan git clone

git clone https://github.com/qadrLabs/belajar-laravel-8-testing-crud-feature.git

Selanjutnya masuk ke direktori project

cd belajar-laravel-8-testing-crud-feature

Lalu kita copy .env.example menjadi .env 

cp .env.example .env

Selanjutnya kita sesuaikan credentials database di file ini.

Selanjutnya kita install dependensi dengan run command.

composer install

Lalu kita generate key menggunakan command ```

php artisan key:generate

Selanjutnya kita run command

php artisan migrate

Sekarang kita coba run testing terlebih dahulu untuk memastikan tidak terdapat error.

vendor/bin/phpunit

Output ketika command di atas kita run.

$ vendor/bin/phpunit
PHPUnit 9.5.9 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 00:00.062, Memory: 22.00 MB

OK (2 tests, 4 assertions)

Oke, sekarang kita mulai percobaan upgrade versi 8 ke versi 9.

Step 1 - Upgrade Laravel versi 8 ke Laravel versi 9

Sekarang kita buka file composer.json terlebih dahulu. Lalu kita sesuaikan versi php sesuai dengan requirement php untuk laravel versi 9. Temukan baris kode berikut ini di file composer.json.

"require": {
        "php": "^7.3|^8.0",

        // ... baris kode lainnya
    },

Lalu kita ubah versi phpnya menjadi ^8.0.2.

    "require": {
        "php": "^8.0.2",

        // ... baris kode lainnya
    },

Selanjutnya kita ubah versi laravel/framework dan library nunomaduro/collision.

    "require": {

        "laravel/framework": "^9.0",

        // ... baris kode lainnya
    },
    "require-dev": {

        "nunomaduro/collision": "^6.1",

        // ... baris kode lainnya
    },

Lalu yang terakhir ubah library facade/ignition dengan "spatie/laravel-ignition": "^1.0"

    "require-dev": {
        "spatie/laravel-ignition": "^1.0",

        // .. baris kode lainnya
    },

Save kembali file composer.json.

Selanjutnya kita update menggunakan command

composer update

Tunggu sampai proses update framework dan library selesai.

Apabila sudah selesai, kita coba run kembali testing untuk memastikan semuanya berjalan dengan baik.

vendor/bin/phpunit
vendor/bin/phpunit
PHPUnit 9.6.11 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 00:00.071, Memory: 24.00 MB

OK (2 tests, 4 assertions)

Oke tidak ada error atau apapun tanda proses upgrade laravel versi 8 ke laravel 9 berhasil.

Sebagai alternatif boleh juga buka projectnya langsung di browser. Run command.

php artisan serve

Lalu buka http://127.0.0.1:8000 di browser. Apabila tidak ada error tandanya proses upgrade berhasil.

Step 2 - Upgrade Laravel versi 9 ke Laravel versi 10

Sebelum melanjutkan proses upgrade versi laravel, kita harus ganti dulu versi PHP yang digunakan untuk memenuhi syarat requirement penggunaan Laravel versi 10, yaitu PHP versi 8.1 ke atas.

Setelah versi PHP diubah, kita cek kembali versi php yang digunakan untuk memastikan.

php -v

Output ketika command di run.

$ php -v
PHP 8.1.22 (cli) (built: Aug 14 2023 05:32:33) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.22, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.22, Copyright (c), by Zend Technologies

Oke requirement pertama sudah terpenuhi.

Requirement berikutnya adalah composer yang digunakan yaitu composer 2.2.0 atau lebih besar.

Sekarang kita cek versi composer.

composer --version

Output ketika command dirun.

$ composer --version
Composer version 2.3.5 2022-04-13 16:43:00

Output di atas adalah composer yang saya gunakan.

Oke requirement untuk composer juga sudah terpenuhi.

Sekarang kita lanjutnkan proses upgrade dari laravel versi 9 ke laravel versi 10.

Langkah pertama adalah menyesuiakan versi PHP sesuai dengan requirement laravel 10. Buka kembali file composer.json,

    "require": {
        "php": "^8.0.2",

        // ... baris kode lainnya
    },

lalu kita sesuaikan versi php nya.

    "require": {
        "php": "^8.1",

        // ... baris kode lainnya
    },

Langkah kedua adalah update dependensi yang digunakan. Temukan laravel dan library di bawah ini.

    "require": {
        // ... baris kode lainnya
        "laravel/framework": "^9.0",
        "laravel/sanctum": "^2.11",

        // ... baris kode lainnya
    },
    "require-dev": {
        "spatie/laravel-ignition": "^1.0",

        // ... baris kode lainnya
    },

Lalu kita sesuaikan versinya dan tambahkan library doctrine/dbal.

"require": {

        "laravel/framework": "^10.0",
        "laravel/sanctum": "^3.2",
        "doctrine/dbal": "^3.0"

        // ... baris kode lainnya
    },
    "require-dev": {
        "spatie/laravel-ignition": "^2.0",

        // ... baris kode lainnya
    },

Karena kita menggunakan phpunit untuk testing kita perlu menyesuikan library nya juga.

    "require-dev": {
        // ... baris kode lainnya

        "nunomaduro/collision": "^6.1",
        "phpunit/phpunit": "^9.3.3"
    },

Kita sesuikan versi phpunit dan library nunomaduro/collision.

    "require-dev": {
        // ... baris kode lainnya

        "nunomaduro/collision": "^7.0",
        "phpunit/phpunit": "^10.0"
    },

Langkah selanjutnya adalh modifikasi versi minimum stability menjadi stable.

"minimum-stability": "stable",

Karena core Laravel 10 sudah menyediakan CORS middleware, kita hapus fruitcake/laravel-cors dependensi.

    "require": {
        "php": "^8.1",
        "fruitcake/laravel-cors": "^2.0", // hapus ini
        "guzzlehttp/guzzle": "^7.0.1",
        "laravel/framework": "^10.0",
        "laravel/sanctum": "^3.2",
        "laravel/tinker": "^2.5",
        "doctrine/dbal": "^3.0"
    },

Setelah library dihapus, berikut ini adalah dependensi yang sudah kita sesuaikan.

    "require": {
        "php": "^8.1",
        "guzzlehttp/guzzle": "^7.0.1",
        "laravel/framework": "^10.0",
        "laravel/sanctum": "^3.2",
        "laravel/tinker": "^2.5",
        "doctrine/dbal": "^3.0"
    },
    "require-dev": {
        "spatie/laravel-ignition": "^2.0",
        "fakerphp/faker": "^1.9.1",
        "laravel/sail": "^1.0.1",
        "mockery/mockery": "^1.4.2",
        "nunomaduro/collision": "^7.0",
        "phpunit/phpunit": "^10.0"
    },
    "minimum-stability": "stable",

Karena terdapat kode yang menggunakan library fruitcake/laravel-cors, kita perlu menghapus penggunaannya dan menyesuaikan dengan code dari laravel.

Buka file app/Http/Kernel.php, lalu temukan baris kode berikut ini.

    protected $middleware = [

        // ... baris kode lainnya

        \Fruitcake\Cors\HandleCors::class, // temukan class ini
        // ... baris kode lainnya
    ];

Lalu kita sesuaikan menjadi baris kode berikut.

    protected $middleware = [
        // ... baris kode lainnya

        \Illuminate\Http\Middleware\HandleCors::class,

       // ... baris kode lainnya
    ];

Save kembali file app/Http/Kernel.php.

Langkah selanjutnya adalah update juga library third party yang digunakan. Ini langkah opsional, karena di sample project ada library tambahan untuk testing jadi kita coba update juga.

Buka kembali file composer.json, lalu temukan baris kode berikut ini.

    "require-dev": {

        "laravel/browser-kit-testing": "^6.4",
        // ... baris kode lainnya
    },

Kita sesuaikan dengan versi library yang support laravel 10.

    "require-dev": {

        "laravel/browser-kit-testing": "^7.0",
        // ... baris kode lainnya
    },

Sekarang kita mulai proses update framework dan dependensi yang sudah kita sesuaikan dengan run command.

composer update

Tunggu sampai proses update selesai.

Setelah selesai kita coba run testing menggunakan command.

vendor/bin/phpunit

Output ketika dirunnya ternyata perlu ada penyesuaian konfigurasi phpunit untuk versi terbaru.

vendor/bin/phpunit
PHPUnit 10.3.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.1.22
Configuration: /home/fourze/app/testing-lab/laravel-10/belajar-laravel-8-testing-crud-feature/phpunit.xml

..                                                                  2 / 2 (100%)

Time: 00:00.078, Memory: 26.00 MB

There was 1 PHPUnit test runner deprecation:

1) Your XML configuration validates against a deprecated schema. Migrate your XML configuration using "--migrate-configuration"!

OK, but there were issues!
Tests: 2, Assertions: 4, Deprecations: 1.

Sekarang kita coba sesuaikan konfigurasi phpunit dengan run command.

vendor/bin/phpunit --migrate-configuration

Output di terminal menampilkan prosesnya.

$ vendor/bin/phpunit --migrate-configuration
PHPUnit 10.3.2 by Sebastian Bergmann and contributors.

Created backup:         /home/fourze/app/testing-lab/laravel-10/belajar-laravel-8-testing-crud-feature/phpunit.xml.bak
Migrated configuration: /home/fourze/app/testing-lab/laravel-10/belajar-laravel-8-testing-crud-feature/phpunit.xml

Sekarang kita coba run kembali phpunit.

vendor/bin/phpunit 

Output:

vendor/bin/phpunit 
PHPUnit 10.3.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.1.22
Configuration: /home/fourze/app/testing-lab/laravel-10/belajar-laravel-8-testing-crud-feature/phpunit.xml

..                                                                  2 / 2 (100%)

Time: 00:00.076, Memory: 26.00 MB

OK (2 tests, 4 assertions)

Ya, tidak ada error ketika kita run testing. Ini tandanya prosees upgrade dari laravel versi 9 ke laravel versi 10 berhasil.

Tentu untuk memastikan bisa run project di browser secara langsung. Run command.

php artisan serve

Lalu buka http://127.0.0.1:8000/post di browser. Apabila tidak terdapat error, ini tandanya proses upgrade berhasil.

Sekarang kita cek versi laravel menggunakan command di bawah ini.

php artisan --version

Output:

$ php artisan --version
Laravel Framework 10.19.0

Penutup

Pada postingan kali ini kita sudah mencoba untuk melakukan proses upgrade versi framework laravel. Dimulai dari upgrade laravel versi 8 ke versi 9, lalu dilanjutkan dengan upgrade laravel versi 9 ke versi 10. Sesuai dengan goal yang kita tetapkan di awal percobaan dan proses upgrade berhasil, testing menggunakan phpunit pun berhasil.

Gun Gun Priatna
Software Engineer, Content Writer and Founder qadrlabs.com
Komentar

blog comments powered by Disqus