skip to Main Content

Apa Yang Baru di Laravel 9? Simak Updatenya Berikut Ini – Part 2

Pada artikel sebelumnya tentang “Apa yang baru di laravel 9 – Part 1” kita telah membahas tentang 10 poin update terbaru dari Laravel 9 :

11. Controller Route Groups

Kalian sekarang dapat menggunakan controller’ method untuk menentukan controller umum untuk semua route dalam grup. Kemudian, saat mendefinisikan route, kita hanya perlu menyediakan controller method yang dipanggil:


use App\Http\Controllers\OrderController;

Route::controller(OrderController::class)->group(function () {
   Route::get('/orders/{id}', 'show');
   Route::post('/orders', 'store');
});

 

12. Enum Eloquent Attribute Casting

Eloquent sekarang mengizinkan kita untuk memasukan nilai atribut kalian ke PHP enums. Untuk mencapainya, kita dapat menentukan attribute dan enum yang ingin kalian masukan kedalam model’s $casts property array:


use App\Enums\ServerStatus;

/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
   'status' => ServerStatus::class,
];

Sekali kamu definisikan masukan kalian ke model, attribute yang sudah ditentukan secara otomatis akan dilemparkan ke dan dari enum ketika kamu berinteraksi dengan attribute:


if ($server->status == ServerStatus::provisioned) {
    $server->status = ServerStatus::ready;
    $server->save();
}

 

13. Forced Scoped Bindings

Di rilisan Laravel sebelumnya, kamu mungkin ingin memasukan model Eloquent kedua dalam definisi route sedemikian rupa sehingga harus menjadi child dari model Eloquent sebelumnya. Sebagai contoh, mempertimbangkan definisi route ini yang mengambil posting blog dengan slug untuk pengguna tertentu :

use App\Models\Post;
use App\Models\User;

Route::get('/users/{user}/posts/{post:slug}', function (User $user, Post $post) {
    return $post;
});

Ketika menggunakan custom keyed implicit binding sebagai nested route parameter, Laravel akan  secara otomatis membuat cakupan query untuk mengambil nested model dari parent-nya menggunakan konvensi untuk menebak nama hubungan pada parent-nya. Bagaimanapun, behavior ini sebelumnya hanya didukung oleh Laravel ketika custom key sudah digunakan untuk child route binding.

Namun, di Laravel 9.x, kamu sekarang dapat menginstruksikan Laravel untuk mencakup “child” bindings bahkan ketika custom key tidak disediakan. Untuk melakukannya, kamu dapat memanggil  scopeBindings method ketika mendefinisikan route kamu:

use App\Models\Post;
use App\Models\User;

Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) {
     return $post;
})->scopeBindings();

Atau, kamu dapat menginstruksikan seluruh group dari route definitions untuk menggunakan scoped bindings:


Route::scopeBindings()->group(function () {
    Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) {
        return $post;
    });
});

14. Laravel Breeze API & Next.js

The Laravel Breeze starter kit telah menerima sebuah  “API” scaffolding mode dan Next.js frontend implementation gratis. Starter kit scaffolding ini dapat digunakan untuk memulai aplikasi Laravel kamu yang berfungsi sebagai backend, API terotentikasi Laravel Sanctum untuk frontend JavaScript.

15. Laravel Scout Database Engine

Jika aplikasi kamu berinteraksi dengan database berukuran kecil hingga menengah atau memiliki beban kerja yang ringan, kamu sekarang dapat menggunakan Scout’s “database” engine dibandingkan dengan layanan pencarian khusus seperti Algolia atau MeiliSerach. Database engine akan menggunakan “where like” clauses dan alat memfilter hasil dari database yang ada untuk menentukan hasil penelusuran yang sesuai untuk kueri kamu.

16. Full Text Indexes / Where Clauses

Ketika menggunakan MySQL atau  PostgreSQL, fullText method ini sekarang dapat ditambahkan ke definisi kolom untuk menghasilkan indeks teks lengkap:


$table->text('bio')->fullText();

Selain itu,method  whereFullText dan orWhereFullText dapat digunakan untuk menambahkan “where like” clauses  teks lengkap ke query untuk kolom yang memiliki indeks teks lengkap. Metode-metode ini akan diubah menjadi SQL yang sesuai untuk sistem database yang mendasarinya oleh Laravel. Misalnya, MATCH AGAINST clauses akan dibuat untuk aplikasi yang menggunakan MySQL:


$users = DB::table('users')
           ->whereFullText('bio', 'web developer')
           ->get();

17. Rendering Inline Blade Templates

Terkadang kamu perlu untuk merubah raw blade template string menjadi valid HTML. Kamu dapat melakukannya dengan menggunakan render method yang disediakan oleh  Blade facade. Render method ini menerima Blade template string dan optional array dari data untuk diberikan ke template:


use Illuminate\Support\Facades\Blade;

return Blade::render('Hello, {{ $name }}', ['name' => 'Julian Bashir']);

18. Soketi Echo Server

Meskipun tidak eksklusif untuk Laravel 9.x, Laravel baru-baru ini membantu dengan dokumentasi Soketi, server Web Socket kompatibel Laravel Echo yang ditulis untuk Node.js. Soketi menyediakan alternatif open source yang bagus untuk Pusher dan bisa untuk aplikasi yang lebih suka mengelola server Web Socket mereka sendiri.

 

19. Bootstrap 5 Tampilan Pagination

Laravel sekarang menyertakan tampilan pagination yang dibuat menggunakan Bootstrap 5. Untuk menggunakan tampilan ini dibandingkan menggunakan default Tailwind views, Kamu dapat memanggil paginator’s useBootstrapFive method dengan  boot method dari kelas  App\Providers\AppServiceProvider kamu:


use Illuminate\Pagination\Paginator;

/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
    Paginator::useBootstrapFive();
}

20.Improved Ignition Exception Page

Ignition, open source exception debug page yang dibuat oleh Spatie, telah didesain ulang dari awal. Ignition baru yang ditingkatkan dikirimkan dengan Laravel 9.x dan menyertakan tema terang/gelap, fungsionalitas “open in editor” yang dapat disesuaikan, dan banyak lagi.

Laravel 9 Ignition Exception Page

21. New Helpers

Laravel 9.x memperkenalkan dua fungsi pembantu baru yang nyaman yang dapat kamu gunakan dalam aplikasi kamu sendiri.

‘str’

‘str’ function mengembalikan Illuminate\Support\Stringable contoh baru untuk string yang diberikan. Fungsi ini setara dengan ‘str::of’ method:


$string = str('Taylor')->append(' Otwell');

// 'Taylor Otwell'

Jika tidak ada argumen yang diberikan ke str fungsi, fungsi akan mengembalikan turunan dari Illuminate\Support\Str:


$snake = str()->snake('LaravelFramework');

// 'laravel_framework'

to_route

to_route function ini menghasilkan response HTTP yang redirect untuk route dengan nama tertentu, menyediakan cara ekspresif untuk redirect ke routes dengan nama tertentu dari routes dan controllers kamu:


return to_route('users.show', ['user' => 1]);

Jika memungkinkan, kamu dapat dapat meneruskan kode status HTTP yang harus ditetapkan ke redirect dan header response tambahan apa pun sebagai argumen ketiga dan keempat ke to_route method.


return to_route('users.show', ['user' => 1], 302, ['X-Framework' => 'Laravel']);

 

22. File server.php dapat dihapus

Sebuah fitur kecil tetapi kamu sekarang dapat menghapus server.php file dari proyek kamu dan itu akan dimasukkan ke dalam framework. File ini hanya digunakan untuk php artisan serve.

——–

Penulis : Aulia Brahmantio Diaz – Javascript Programmer Xsis Mitra Utama

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Back To Top