belajar laravel 8 keatas, Fitur baru & kelebihan
Sebelum memutuskan untuk mangambil base laravel 8 untuk memulai proyek ada baiknya kita tau kelebihan yang ditawarkan pada versi ini, walaupun pada saat tulisan ini dibuat versi 10 sudah keluar
dirilis tanggal September 8th, 2020 support sampai tanggal July 26th, 2022 dan end support pada tanggal January 24th, 2023
Minimal spesifikasi sistem yang dibutuhkan
- php minimal 7.3
- PHP Extension (BCMath, Ctype, FileInfo, JSON, Mbstring, OpenSSL, PDO PHP, Tokenizerr PHP, XML PHP)
- nginx / apache web server / native
Laravel Jetstream
Laravel Jetstream adalah starter kit aplikasi yang dirancang untuk Laravel dan memberikan titik awal yang lengkap untuk aplikasi Laravel berikutnya. Jetstream menyediakan: implementasi untuk login aplikasi
- pendaftaran
- verifikasi email
- autentikasi dua faktor
- manajemen sesi
- API melalui Laravel Sanctum
- dan fitur manajemen tim opsional
Jetstream dirancang menggunakan Tailwind CSS dan menawarkan pilihan scaffold dengan Livewire atau Inertia. Laravel Jetstream menawarkan dua stack frontend pilihan : Livewire dan Inertia.js. Setiap stack memberikan titik awal yang produktif dan kuat untuk membangun aplikasi Anda, namun stack yang dipilih akan bergantung pada pilihan template bahasa Anda.
Livewire + blade Laravel Livewire adalah pustaka yang memudahkan pembuatan antarmuka modern, reaktif, dan dinamis menggunakan Laravel Blade sebagai bahasa template Anda. Ini adalah stack yang bagus untuk dipilih jika Anda ingin membuat aplikasi yang dinamis dan reaktif, dan merupakan alternatif yang bagus untuk kerangka JavaScript lengkap seperti Vue.js.
Saat menggunakan Livewire, Anda dapat memilih bagian mana dari aplikasi Anda yang akan menjadi komponen Livewire, sedangkan aplikasi Anda yang lain dapat dirender sebagai template Blade tradisional yang biasa Anda gunakan.
Inertia + Vue stack Inertia yang disediakan oleh Jetstream menggunakan Vue.js sebagai bahasa templatingnya. Membuat aplikasi Inertia sangat mirip dengan membuat aplikasi Vue pada umumnya; namun, Anda akan menggunakan router Laravel alih-alih router Vue. Inertia adalah pustaka kecil yang memungkinkan Anda merender komponen Vue file tunggal dari backend Laravel Anda dengan memberikan nama komponen dan data yang harus dimasukkan ke dalam “props” komponen tersebut.
Dengan kata lain, stack ini memberi Anda kekuatan penuh Vue.js tanpa kerumitan perutean sisi klien. Anda dapat menggunakan routing belajar Laravel 8 standar dan melihat pendekatan hidrasi data yang biasa Anda gunakan.
stack Inertia adalah pilihan tepat jika Anda merasa nyaman dan senang menggunakan Vue.js sebagai bahasa template Anda.
Anda dapat menggunakan Composer untuk menginstal Jetstream ke proyek Laravel baru Anda:
composer require laravel/jetstream
Model Directory
sekarang secara default laravel berisi direktori app/Models. Semua perintah generator yang relevan telah diperbarui untuk menganggap model ada di dalam direktori app/Models jika ada. Jika direktori tidak ada, framework akan menganggap model Anda harus ditempatkan di dalam direktori app. jadi misal nya anda menjalankan perintah
php artisan make:model Flight
maka sebelum file model Flight.php digenerate framework akan memeriksa apakah folder app/Models ada jika iya maka model Flight akan ditempatkan disana, namun jika sebelumnya anda menghapus folder app/Models karena lebih memilih untuk meletakkan dalam folder app/ maka secara otomatis laravel akan meletakkan model Flight.php di folder app/
Model Factory Classes
pada versi belajar laravel 8 kebawah atau 7 kebawah factory dalam bentuk php file biasa, contoh misal ada BookFactory untuk model Book ini akan terlihat seperti ini
<?php
use App\Book;
use Illuminate\Support\Str;
use Faker\Generator as Faker;
$factory->define(Book::class, function (Faker $faker) {
$type = ['fiction', 'nonfiction'];
return [
'name' => $faker->word,
'author' => $faker->name,
'type' => $type[rand(0, (count($type)-1))]
];
});
jika kita ingin membuat factory pada artisan tinker di laravel 7
factory('App\Book')->make();
seperti yang kita lihat disini tidak dalam bentuk class, syntax juga sulit untuk diingat dengan menggunakan closure dan “magic” variable seperti $factory
pada saat belajar laravel 8 model factory tidak berupa simple php files lagi, namun hadir dalam bentuk class yang akan lebih memudahkan kita dalam menambahkan custom method dikemudian jika ingin membuat factory untuk model Book dengan menggunakan perintah artisan
$ php artisan make:factory BookFactory --model=Book
maka akan mengenerate BookFactory.php file dalam folder database/factories seperti ini
<?php
namespace Database\Factories;
use App\Models\Book;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class BookFactory extends Factory
{
protected $model = Book::class;
public function definition()
{
return [
// pada awal file ini tergenerate fungsi ini kosong
'title' => $this->faker->name,
'author' => $this->faker->name,
'published' => 1
//misal mau tambah custom state active
'is_active' => false
];
// custom method untuk handle state active
public function subscribed()
{
return $this->state([
'is_active' => true
]);
}
}
}
jika kita ingin membuat factory pada artisan tinker di laravel 8
Book::factory(1)->create();
contoh membuat book factory 3 record
Book::factory()->count(3)->create();
contoh membuat book factory state active
Book::factory()->subscribed()->make();
sekarang kita bisa menggunakan factory pada model instance pada kasus ini model Book, ini karena pada saat membuat model menggunakan artisan make:model Book laravel 8 juga menambahkan HasFactory trait
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
use HasFactory;
}
Migration Squashing
Saat Anda membangun aplikasi, ketika membuat/mengedit database Anda setiap mengumpulkan banyak file migrasi dari waktu ke waktu. bayangkan anda mengembangkan aplikasi ini dalam waktu tahunan Ini dapat menyebabkan direktori migrasi Anda membengkak dengan potensi ratusan migrasi. Jika Anda menggunakan MySQL atau PostgreSQL, Anda sekarang dapat “memeras” / menyatukan migrasi Anda menjadi satu file SQL. Untuk memulai, jalankan
php artisan schema:dump
misal anda mempunyai file migrasi migrasi_kesatu.php migrasi_kedua.php migrasi_ketiga.php
ketika menjalankan peritah schema:dump maka akan ada 1 file baru yang akan terbuat didalam folder database/schema/mysql-schema.sql yang berisi kumpulan 3 migrasi diatas dan apabila anda menambahkan parameter prune
php artisan schema:dump --prune
maka secara otomatis ketiga file migrasi (migrasi_kesatu.php, migrasi_kedua.php, migrasi_ketiga.php) yang diatas akan dihapus dan hanya menyisakan file mysql-schema.sql, ketika nanti anda menjalankan perinta migrasi laravel secara default pertama kali akan membaca file dari mysql-schema.sql dan kemudian akan dilanjutkan menjalankan file migrasi-migrasi yang baru
Job Batching
Fitur job batching memungkinkan Anda untuk dengan mudah mengeksekusi sekumpulan pekerjaan dan kemudian melakukan beberapa action ketika kumpulan pekerjaan telah selesai dieksekusi.
Metode batch baru dari Bus facade dapat digunakan untuk mengirimkan sekumpulan jobs. Tentu saja, batching sangat berguna jika digabungkan dengan callback. Jadi, Anda dapat menggunakan metode seperti then, catch, dan finally
untuk callback yang selesai pada batch tersebut. Setiap callback akan menerima instance Illuminate\Bus\Batch
saat dipanggil
bersambung …
- Improved Rate Limiting
- Improved Maintenance Mode
- Pre-Rendering Maintenance Mode View
- Closure Dispatch / Chain
- Dynamic Blade Component
- Event Listener Improvements
- Time Testing Helpers
- Tailwind Pagination Views
- Routing Namespace Update