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!

 

CÔNG TY CỔ PHẦN CÔNG NGHỆ NEWNET

Địa chỉ: 554/10 Phạm Văn Đồng, P. 13, Q. Bình Thạnh, TP. Hồ Chí Minh

Email: info@newnet.vn

Hotline: 0789 99 4747

Website: https://newnet.vn

Mobile app Đã đến 2021 rồi, doanh nghiệp cần phải thiết kế mobile app cho riêng mình thôi!

Đã đến 2021 rồi, doanh nghiệp cần phải thiết kế mobile app cho riêng mình thôi!

Thiết kế mobile app cho doanh nghiệp không chỉ mang ý nghĩa quảng bá sản phẩm, chăm sóc khách hàng mà còn mang về lợi nhuận và xây dựng nhận diện thương hiệu. Trong năm 2021, đây là xu hướng hot nhất và sẽ còn tiếp diễn trong vài năm tới. Hãy cùng tìm hiểu về mobile app!

Chi tiết