Dalam artikel kali ini kita akan membahas apa saja yang terbaru dalam laravel dan juga ekosistem nya.
Dalam artikel kali ini kita akan membahas apa saja yang terbaru dalam laravel v10
dan juga ekosistem nya.
Sejak laravel versi ini rilis, kita bisa membuat perintah make:model
tanpa memberikan namanya, walaupun sebenarnya bisa dengan memasukkan nama atau flag nya.
Berikut ini adalah perintah ketika kita ingin membuat model untuk Product
.
php artisan make:model
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.
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.
Sama dengan model, controller juga akan seperti itu. Kita tetap akan di tanya ketika hanya membuat artisan untuk make:controller
.
php artisan make:controller
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
.
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.
Bahkan sebenarnya tidak hanya itu, semua perintah yang berbentuk make
akan selalu bertanya terkait nama maupun opsi yang di tawarkannya.
Jika kalian ingin tahu apa-apa saja perintah untuk make
, kita bisa lakukan perintah list
diikuti dengan key nya seperti:
php artisan list make
Maka harusnya akan muncul daftar perintah make seperti berikut:
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
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
composer require laravel/breeze
Setelah itu, mari kita jalankan perintah breeze:intall
seperti berikut:
php artisan breeze:install
Dan harusnya, akan muncul beberapa pertanyaan seperti:
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
Secara personal, saya sering lupa untuk menambahkan flag pest
. Jadi harusnya dengan fitur ini, saya tidak perlu khawatir lagi karena sudah di ingatkan.
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.
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.
Pastikan Anda sudah memakai laravel installer versi yang terbaru yaitu v4.4.0
, untuk memeriksanya, bisa dengan menjalakan perintah berikut:
laravel --version
Nah jika belum menggunakan versi terakhir, atau belum memperbarui nya, silakan perbarui dengan menjalankan perintah berikut:
composer global update laravel/installer
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
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
Maka harusnya, sekarang kurang lebih outputnya akan sudah seperti ini:
____
| __ ) _ __ ___ ___ _______
| _ \| '__/ _ \/ _ \_ / _ \
| |_) | | | __/ __// / __/
|____/|_| \___|\___/___\___|
Creating a "laravel/laravel" project at "./typo"
Yang artinya, dengan satu command tersebut, kita sudah bisa mendapatkan scaffolding sesuai yang kita inginkan.
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'
Buka file nya dan masukkan script berikut ini:
Schema::table('personal_access_tokens', function (Blueprint $table) {
$table->timestamp('expires_at')->nullable()->after('last_used_at');
});
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:
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,
]);
}
Dengan begitu, maka ketika saya lakukan perintah
artisan migrate:fresh --seed
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
Untuk throw exceptionnya mudah saja dengan:
$result = Process::run('ls -la')->throw();
$result = Process::run('ls -la')->throwIf($condition);
Untuk melihat semua api nya, bisa langsung cek disini.
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
Kemudian silakan publish vendor nya, karena dia nantinya akan memberikan file migration untuk kita.
php artisan vendor:publish --provider="Laravel\Pennant\PennantServiceProvider"
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:
public function boot(): void
{
Feature::define('golden-features', function (User $user) {
return $user->is_subscribed;
});
}
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
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.
class UserResource extends JsonResource
{
'username' => $this->username,
// ...
'features' => Feature::all()
}
Kemudian di controller kita:
public function index(User $user): \Inertia\Response
{
return inertia('Some/Component', [
'user' => UserResource::make($user)
]);
}
Atau jika ingin, kita bisa juga memasukkan trait nya pada model yang kita inginkan.
use Laravel\Pennant\Concerns\HasFeatures;
use ...
class User extends Authenticatable
{
use HasApiTokens;
use HasFactory;
use Notifiable;
use HasFeatures;
/**
* ...
*/
}
Kemudian kita bisa replace yang tadinya pakai class Feature
dengan hanya $this
seperti:
class UserResource extends JsonResource
{
'username' => $this->username,
// ...
'features' => $this->features(),
}
Maka harusnya hasilnya akan sama saja.
Pertama kali laravel v10
rilis, dia akan membuat native type saat kita buat resource controller seperti:
artisan make:controller ArticleController --model=Article
Maka harusnya dia akan menunjukkan metode-metode yang mempunyai native type seperti:
public function index(): Response
{
//
}
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.
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.