Dapatkan diskon up to 40% untuk pembelian di bulan Ramadhan.

Apa Yang Baru Di Laravel 10 Dan Ekosistem nya

Dalam artikel kali ini kita akan membahas apa saja yang terbaru dalam laravel dan juga ekosistem nya.

9 min read

Published on 05 Feb (updated: 22 Feb)

Written by Irsyad A. Panjaitan

Fill in LaravelReleased

ArticlesApa Yang Baru Di Laravel 10 Dan Ekosistem nya

Dalam artikel kali ini kita akan membahas apa saja yang terbaru dalam laravel v10 dan juga ekosistem nya.

Laravel 9.49

Sejak laravel versi ini rilis, kita bisa membuat perintah make:model tanpa memberikan namanya, walaupun sebenarnya bisa dengan memasukkan nama atau flag nya.

Model

Berikut ini adalah perintah ketika kita ingin membuat model untuk Product.

terminal
php artisan make:model
bashCopy

Ketika kita enter, dulu nya ini akan error, namun sekarang tidak. Karena dia sudah akan langsung bertanya apa nama model kita. Kurang lebih akan seperti ini jika kita terus enter.

terminal
What should the model be named? ❯ Product Would you like any of the following? [none] none ........... ..............0 all .......................... 1 factory ........... ...........2 form requests ........... .....3 migration ........... .........4 policy ........... ............5 resource controller ...........6 seed .........................7 4 INFO Model [app/Models/Product.php] created successfully. INFO Migration [database/migrations/2023_02_05_095212_create_products_table.php] created successfully.
bashCopy

Controller

Sama dengan model, controller juga akan seperti itu. Kita tetap akan di tanya ketika hanya membuat artisan untuk make:controller.

terminal
php artisan make:controller
bashCopy

Selanjutnya, dia akan memberi pertanyaan seputar opsi yang diberikan default controller seperti: api, invokable, resource, singleton atau bahkan tidak ada sama sekali, kita bisa pilih empty.

terminal
What should the controller be named? ❯ ProductController Which type of controller would you like: [empty] empty ............................ 0 api............................... 1 invokable ........................ 2 resource ......................... 3 singleton ........................ 4 3 What model should this resource controller be for? [none] ❯ Product INFO Controller [app/Http/Controllers/ProductController.php] created successfully.
bashCopy

Bahkan sebenarnya tidak hanya itu, semua perintah yang berbentuk make akan selalu bertanya terkait nama maupun opsi yang di tawarkannya.

Make

Jika kalian ingin tahu apa-apa saja perintah untuk make, kita bisa lakukan perintah list diikuti dengan key nya seperti:

terminal
php artisan list make
bashCopy

Maka harusnya akan muncul daftar perintah make seperti berikut:

terminal
make:cast Create a new custom Eloquent cast class make:channel Create a new channel class make:command Create a new Artisan command make:component Create a new view component class make:controller Create a new controller class make:event Create a new event class make:exception Create a new custom exception class make:factory Create a new model factory make:job Create a new job class make:listener Create a new event listener class make:mail Create a new email class make:middleware Create a new middleware class make:migration Create a new migration file make:model Create a new Eloquent model class make:notification Create a new notification class make:observer Create a new observer class make:policy Create a new policy class make:provider Create a new service provider class make:request Create a new form request class make:resource Create a new resource make:rule Create a new validation rule make:scope Create a new scope class make:seeder Create a new seeder class make:test Create a new test class
bashCopy

Laravel Breeze

Ketika kita lakukan instalasi breeze, pastinya kita akan melakukan perintah breeze:install, tanpa kita beri flag seperti --ssr, --pest, atau ssr. Dia akan default menggunakan blade. Namun sekarang, itu tidak perlu kita khawatirkan jika keburu ke enter.

Pertama sekali, mari kita lakukan instalasi breeze nya dengan composer

terminal
composer require laravel/breeze
bashCopy

Setelah itu, mari kita jalankan perintah breeze:intall seperti berikut:

terminal
php artisan breeze:install
bashCopy

Dan harusnya, akan muncul beberapa pertanyaan seperti:

terminal
Which stack would you like to install? blade ...................... 0 react ...................... 1 vue ........................ 2 api ........................ 3 1 Would you like to install dark mode support? (yes/no) [no] ❯ no Would you like to install Inertia SSR support? (yes/no) [no] yes Would you prefer Pest tests instead of PHPUnit? (yes/no) [no] yes ./composer.json has been updated
bashCopy

Secara personal, saya sering lupa untuk menambahkan flag pest. Jadi harusnya dengan fitur ini, saya tidak perlu khawatir lagi karena sudah di ingatkan.

Laravel Horizon

Untuk update kali ini juga sangat kren, salah satunya adalah warna untuk dark pada horizon sudah di perbaiki. Jadi tampilan sudah lebih mantap dari pada sebelumnya. Tambah lagi ada menu tambahan yaitu Silenced Jobs.

Laravel Telescope

Sama dengan horizon, kali ini telescope juga mendapat update untuk design dan juga ada tambahan menu nya. Anda bisa langsung mencoba package ini, karena saya sendiri juga memakai nya.

Laravel New Command

Pastikan Anda sudah memakai laravel installer versi yang terbaru yaitu v4.4.0, untuk memeriksanya, bisa dengan menjalakan perintah berikut:

laravel --version
bashCopy

Nah jika belum menggunakan versi terakhir, atau belum memperbarui nya, silakan perbarui dengan menjalankan perintah berikut:

composer global update laravel/installer
bashCopy

Setelah itu, jika sekarang kita buat jalankan perintah laravel help new, maka outputnya harus seperti:

--dev Installs the latest "development" release --git Initialize a Git repository --branch=BRANCH The branch that should be created for a new repository [default: "master"] --github[=GITHUB] Create a new repository on GitHub [default: false] --organization=ORGANIZATION The GitHub organization to create the new repository for --breeze Installs the Laravel Breeze scaffolding --dark Indicate whether Breeze should be scaffolded with dark mode support --ssr Indicate whether Breeze should be scaffolded with Inertia SSR support --jet Installs the Laravel Jetstream scaffolding --stack[=STACK] The Breeze / Jetstream stack that should be installed --teams Indicates whether Jetstream should be scaffolded with team support --pest Installs the Pest testing framework --prompt-breeze Issues a prompt to determine if Breeze should be installed --prompt-jetstream Issues a prompt to determine if Jetstream should be installed
bashCopy

Jika di perhatikan baik-baik, opsi baru disini yaitu --dark, --breeze, --ssr dan --pest. Yep, opsi ini baru datang di laravel installer versi terbaru. Jadi intinya, jika Anda ingin membuat project baru dengan breeze, tidak perlu lagi memulainya dengan instalasi laravel, kemudian package breeze nya.

Karena sekarang, kita sudah bisa menggunakan opsi --breeze untuk membuat scaffolding project nya. Sebagai contoh, disini saya akan membuat project dengan scaffolding breeze react dengan ssr dan juga pest. Biar lebih complit, kita akan tambah juga mode gelapnya. Maka yang saya jalankan kurang lebih akan seperti ini:

laravel new typo --breeze --dark --stack=react --pest --ssr
bashCopy

Maka harusnya, sekarang kurang lebih outputnya akan sudah seperti ini:

____ | __ ) _ __ ___ ___ _______ | _ \| '__/ _ \/ _ \_ / _ \ | |_) | | | __/ __// / __/ |____/|_| \___|\___/___\___| Creating a "laravel/laravel" project at "./typo"
bashCopy

Yang artinya, dengan satu command tersebut, kita sudah bisa mendapatkan scaffolding sesuai yang kita inginkan.

Sanctum Expired Column

Laravel sanctum sekarang sudah v3.2 dengan fitur tambahan yaitu expired. Jadi ketika Anda sudah menggunakan sanctum v2, silakan upgrade ke v3.2. Dan pastinya, untuk mengaktifkan fitur ini, kita perlu membuat 1 migration untuk menambahkan kolom ke table pat.

artisan make:migration 'add expired_at to personal_access_tokens table'
bashCopy

Buka file nya dan masukkan script berikut ini:

add_expired_at_to_personal_access_tokens_table.php
Schema::table('personal_access_tokens', function (Blueprint $table) { $table->timestamp('expires_at')->nullable()->after('last_used_at'); });
phpCopy

Processes

Laravel menyediakan API minimal yang ekspresif di sekitar komponen Proses Symfony, memungkinkan Anda untuk dengan mudah memanggil proses eksternal dari aplikasi Laravel Anda.

Ada 2 metode yang paling penting disini yaitu run dan start. Yang mana run akan menjalankan proses sampai eksekusi selesai, sementara start digunakan untuk proses yang bersifat asynchronous.

Untuk fitur ini saya sendiri sudah pernah test, ketika saja menjalan mfs saya juga ingin semua image yang sudah di masukkan storage juga ikut ter refresh. Nah untuk itu, yang saya lakukan kurang lebih akan seperti ini:

DatabaseSeeder.php
if (app()->environment('local')) { Process::run('rm -rf storage/app/public')->output(); User::factory(20)->create(); $this->call([ StoreSeeder::class, ProductSeeder::class, ReviewSeeder::class, ColorSeeder::class, SizeSeeder::class, ]); }
phpCopy

Dengan begitu, maka ketika saya lakukan perintah

artisan migrate:fresh --seed
bashCopy

maka semua file yang ada di storage/app/public akan ikut terhapus. Jika Anda ingin melihat hasil dari setiap proses yang di jalankan, itu sangat mudah sekali.

$result = Process::run('ls -la'); $result->successful(); // Perintah berhasil $result->failed(); // Perintah jika error $result->exitCode(); // Error dan langsung keluar dari proses $result->output(); // Untuk memperlihatkan output $result->errorOutput(); // Untuk memperlihatkan error
phpCopy

Untuk throw exceptionnya mudah saja dengan:

$result = Process::run('ls -la')->throw(); $result = Process::run('ls -la')->throwIf($condition);
phpCopy

Untuk melihat semua api nya, bisa langsung cek disini.

Laravel Pennant

First-party package yang dibuat oleh salah satu core team Laravel. Ini sangat berguna bagi kita yang sedang ingin menambahkan fitur kepada website kita, namun kita tidak ingin semua orang melihat ini. Melainkan user-user yang kita pilih saja.

Untuk menggunakannya, kita perlu menginstal package nya terlebih dahulu, karena tidak include sewaktu kita install laravel nya.

composer require laravel/pennant
bashCopy

Kemudian silakan publish vendor nya, karena dia nantinya akan memberikan file migration untuk kita.

php artisan vendor:publish --provider="Laravel\Pennant\PennantServiceProvider"
bashCopy

Setelah itu, silakan lakukan artisan migrate. Yang mana dia akan membuatkan table yang namanya features.

Untuk menggunakan api nya sangat mudah sekali. Anda bisa langsung letakkan ini di AppServiceProvider.php tepat di dalam metode boot. Untuk contoh saja ya, saya ingin membuat fitur baru di Parsinta, namun yang boleh melihat hanya user yang premium saja. Maka saya bisa lakukan kurang lebih seperti ini:

AppServiceProvider.php
public function boot(): void { Feature::define('golden-features', function (User $user) { return $user->is_subscribed; }); }
phpCopy

Dan ketika kita ingin menampilkannya di blade, itu sangat mudah sekali dengan blade directive yang diberikan yaitu @feature.

@feature('golden-features') <p>Golden features are enabled for you!</p> @else <p>Golden features are not enabled for you.</p> @endfeature
htmlCopy

Kemudian jika ketika kita sedang bekerja dengan front-end js seperti React or Vue. Kita bisa letakkan semua itu pada class resource yang kita punya.

UserResource.php
class UserResource extends JsonResource { 'username' => $this->username, // ... 'features' => Feature::all() }
phpCopy

Kemudian di controller kita:

UserController.php
public function index(User $user): \Inertia\Response { return inertia('Some/Component', [ 'user' => UserResource::make($user) ]); }
phpCopy

Atau jika ingin, kita bisa juga memasukkan trait nya pada model yang kita inginkan.

User.php
use Laravel\Pennant\Concerns\HasFeatures; use ... class User extends Authenticatable { use HasApiTokens; use HasFactory; use Notifiable; use HasFeatures; /** * ... */ }
phpCopy

Kemudian kita bisa replace yang tadinya pakai class Feature dengan hanya $this seperti:

UserResource.php
class UserResource extends JsonResource { 'username' => $this->username, // ... 'features' => $this->features(), }
phpCopy

Maka harusnya hasilnya akan sama saja.

Resource Controller Updates

Pertama kali laravel v10 rilis, dia akan membuat native type saat kita buat resource controller seperti:

artisan make:controller ArticleController --model=Article
bashCopy

Maka harusnya dia akan menunjukkan metode-metode yang mempunyai native type seperti:

public function index(): Response { // }
phpCopy

Namun karena banyak permasalahan disini, maka taylor selaku creator laravel memutuskan untuk menghapus return type itu. Bisa dilihat tweet nya disini.

Semoga artikel ini bermanfaat ya, like jika kalian suka dan jangan lupa untuk share ke teman-teman yang lain. Saya Irsyad, sampai jumpa di artikel selanjutnya.

Irsyad A. Panjaitan

Let's start living like no one can help us in any event, so that when we are helped in certain times, it becomes a plus in itself.
6

Share on