Như các bạn đã biết, ngày 8/2/2022 vừa rồi Laravel đã chính thức phát hành phiên bản Laravel 9. Các bạn hãy cùng Newnet tìm hiểu xem có những thay đổi gì trong phiên bản mới này nhé!

Thay đổi chu kỳ phát hành

Trước đây Laravel thường được phát hành mỗi 6 tháng một lần. Kể từ phiên bản Laravel 8 trở đi thì các phiên bản sẽ được phát hành hàng năm. Thông thường các bản phát hành sẽ rơi vào thàng 2 hằng năm. 

Việc này sẽ giúp kéo dài tuổi thọ của các phiên bản, đồng thời giúp anh em lập trình viên đỡ phải áp lực hơn khi phải chạy theo các phiên bản mới liên tục như trước đây.

 

Đối với tất cả các bản phát hành Laravel về sau, các bản sửa lỗi được cung cấp trong 18 tháng và các bản sửa lỗi bảo mật được cung cấp trong 2 năm.

Cập nhật toàn bộ các gói Symfony lên phiên bản 6

Laravel sử dụng khá nhiều các gói thư viện đến từ Symfony, ở với phiên bản 9 này, Laravel đã nâng cấp toàn bộ các gói Symfony lên phiên bản 6. 

Phiên bản PHP tối thiểu là 8.0

Vì Laravel nâng cấp toàn bộ các gói Symfony lên phiên bản 6, do đó cũng dẫn đến yêu cầu phiên bản PHP 8.0 trở lên. Việc này ít nhiều cũng sẽ gây ra nhiều khó khăn cho lập trình viên và doanh nghiệp. 

PHP 8.0 cũng đã có rất nhiều cải tiến đáng kể so với các phiên bản trước đây. Và việc cập nhật lên phiên bản PHP 8.0 cũng là điều cần thiết.

Nếu bạn nào đang gặp khó khăn khi phải làm việc với nhiều dự án chạy trên nhiều phiên bản PHP khác nhau thì có thể xem qua bài hướng dẫn cài đặt đa phiên bản PHP này:

Các tính năng mới trong Laravel 9

Bây giờ, chúng ta hãy cùng khám phá danh sách các tính năng và cải tiến mới trong bản phát hành chính thức của Laravel 9.

Route:list

Lệnh route:list đã được làm mới lại để trông cho gọn gàng và đẹp hơn. Trước đây khi bạn chạy lệnh route:list thì nó sẽ ra một danh sách dạng table khá là xấu và cồng kềnh. Thông thường khi cần thao tác thì mình sẽ xuất danh sách route ra một file text và thao tác trên nó. Tuy nhiên từ bây giờ thì mình có thể xem nó trực tiếp trên terminal vì nó đã gọn gàng và có màu sắc trông khá là thú vị.

Anonymous Stub Migrations

Trước đây, mỗi khi bạn chạy lệnh make:migration thì sẽ tạo ra một class có tên dựa theo tên mà bạn đặt, điều này dễ xảy ra xung đột khi vô tình bạn đặt trùng tên với tên migration đã tạo trước đó. 

Ở phiên bản 8.x Laravel đã ra mắt với một tính năng mới được gọi là Anonymous Stub giúp ngăn chặn xung đột tên của class migration. 

Kể từ bây giờ, khi bạn chạy make:migration thì nó sẽ return về là một class Anonymous thay vì một class có tên.

 

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
 
return new class extends Migration {
 
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('people', function (Blueprint $table) {
            $table->string('first_name')->nullable();
        });
    }
};

Symfony Mailer

Ở các phiên bản phát hành trước đây, Laravel đã sử dụng thư viện Swift Mailer để gửi email đi. Thư viện Swift Mailer thì đã quá nổi tiếng và được sử dụng rộng rãi trong rất nhiều ứng dụng. Tuy nhiên nó đã lỗi thời và không còn được duy trì và phát triển nữa.

Do đó, nó đã được thay thế bằng thư viện Symfony Mailer

Forced Scoping Of Route Bindings

Tính này mới này khá thú vị và hữu ích. Forced Scoping Of Route Bindings tạm hiểu là ràng buộc định tuyến.

Với một route thông thường chúng ta sẽ viết như thế này:

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

Với route này thì $post$user sẽ không có sự ràng buộc nào lẫn nhau. Có nghĩa là $post sẽ được lấy từ id ở đường dẫn và gọi query vào Model Post

Nhưng khi sử dụng thêm scopeBindings() như thế này thì $post sẽ được ràng buộc thêm điều kiện user_id bằng với id của $user

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

Điều này sẽ rất hữu ích khi bạn làm việc với các dữ liệu quan hệ. 

Controller Route Groups

Cái này cũng là một cải tiến rất hữu ích, nếu như trước đây khi viết route mà gặp controller có nhiều phương thức thì chúng ta sẽ phải lặp đi lặp lại code khá là dài dòng. Giờ đây thì chúng ta có thể viết lại nó một cách ngắn gọn và dễ hiểu hơn.

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

Hỗ trợ Full Text Indexes và Where Clauses

Khi sử dụng MySQL hoặc PostgreSQL, nếu bạn có đang sử dụng full text search thì giờ đây bạn đã có thể đánh chỉ mục trong migration như sau:

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

Và khi thực hiện truy vấn từ DB thì bạn đã có thể sử dụng phương thức whereFullTextorWhereFullText để truy vấn vào các cột có full-text indexes như thế này:

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

Rendering Inline Blade Templates

Tính năng này mình đã tìm kiếm rất lâu rồi, và bây giờ nó đã được tích hợp vào trong bản cập nhật này.

Trước đây, thỉnh thoảng mình có một số task cần render một đoạn text thành HTML. Và mình đã phải rất cực khổ chỉ để render một dòng text. Nào là phải khai báo rất nhiều, hoặc là phải tạo ra một file blade tạm chỉ để render nội dung ra. Nhưng giờ đây nó đã được đơn giản hoá bằng một dòng code như sau:

Checked / Selected Blade Directives

Trước đây mình đã phải tự viết một helper để kiểm tra trạng thái checked hoặc selected của thẻ inputselect, Nhưng giờ đây  đã có thể sử dụng @checked và @selected để đơn giản hoá việc đó.

<input type="checkbox"
        name="active"
        value="active"
        @checked(old('active', $user->active)) />

Kết luận

Ở bản cập nhật mới này mang đến cho chúng ta rất nhiều cải tiến hay, nó sẽ giúp cho code của các bạn được tối ưu hơn, mạnh mẽ hơn. Tuy nhiên vẫn còn một điển hạn chế đó là chỉ hỗ trợ phiên bản PHP 8.0 trở lên.

Trên đây chỉ là những điểm thay đổi mà mình thấy hay và đáng mong chờ. Ngoài ra còn nhiều điểm thay đổi và cải tiến khác nữa trong phiên bản Laravel 9 này, các bạn có thể xem thêm tại trang Release Notes của Laravel ở địa chỉ sau: https://laravel.com/docs/9.x/releases

Chúc các bạn thành công!

 

Dịch vụ chăm sóc website chuyên nghiệp: Bí quyết tăng hiệu quả kinh doanh

Dịch vụ chăm sóc website chuyên nghiệp: Bí quyết tăng hiệu quả kinh doanh

Thế nào là dịch vụ chăm sóc website? Tại sao doanh nghiệp cần phải tìm kiếm dịch vụ chăm sóc website uy tín? Dịch vụ chăm sóc website ở đâu là tốt nhất tại TP.HCM?

Chi tiết
Đào tạo lập trình Javascript là gì? Tổng quan về JavaScript bạn cần biết

Javascript là gì? Tổng quan về JavaScript bạn cần biết

Tìm hiểu tổng quan về JavaScript, JavaScript là gì? JavaScript có vai trò gì trong thiết kế website? Sử dụng JavaScript thì có những ưu điểm nào vượt trội không? Hãy cùng Newnet tìm hiểu nhé!

Chi tiết
Chăm sóc website Chăm sóc website chuyên nghiệp và toàn diện: bí kíp để đưa website lên top

Chăm sóc website chuyên nghiệp và toàn diện: bí kíp để đưa website lên top

Sở hữu một website là chưa đủ! Bạn cần gia tăng giá trị của website thì việc sở hữu website mới có ý nghĩa. Hãy gia tăng đơn hàng và xây dựng thương hiệu nhờ vào việc sở hữu một website!

Chi tiết
Thiết kế website Bí kíp để doanh nghiệp trở nên chuyên nghiệp hơn: thiết kế website!

Bí kíp để doanh nghiệp trở nên chuyên nghiệp hơn: thiết kế website!

Thiết kế website chuẩn SEO mang lại lợi ích gì mà doanh nghiệp cần phải đầu tư? Tìm hiểu 3 nguyên nhân để doanh nghiệp cần sở hữu website chuẩn SEO cùng Newnet!

Chi tiết
Thiết kế website Tại sao bạn cần phải thiết kế website dành riêng cho doanh nghiệp?

Tại sao bạn cần phải thiết kế website dành riêng cho doanh nghiệp?

Thiết kế website doanh nghiệp là gì? Doanh nghiệp sở hữu một website riêng sẽ có được những lợi ích nào, có giúp doanh nghiệp gia tăng tính cạnh tranh không? Cùng tìm hiểu xem nhé!

Chi tiết
Bán hàng online [Update 2021] Top 8 sản phẩm hot nhất 2021: bán hàng online gì vừa dễ làm vừa dễ lời?

[Update 2021] Top 8 sản phẩm hot nhất 2021: bán hàng online gì vừa dễ làm vừa dễ lời?

Chọn lựa đúng sản phẩm để bán hàng online chiếm tới 50% thành công sau cùng. Vậy thì làm sao mới có thể chọn được mặt hàng đúng đắn để có thể thành công?

Chi tiết