Laravel 10 có gì mới?

Tram Ho

Giới thiệu

Sau hơn một thập kỷ kể từ khi giới thiệu vào tháng Sáu năm 2011, Framework Laravel đã trở nên cực kỳ phổ biến. Các phiên bản của Laravel được release hằng năm với những nâng cấp đáng kể.

Mới đây, vào ngày 14 tháng 2 năm 2023, phiên bản Laravel 10 chính thức được phát hành. Chúng ta hãy cùng nhau tìm hiểu xem phiên bản này có những thay đổi và cập nhật gì so với những phiên bản trước nhé.

Kế hoạch release của Laravel

Hiện nay, các phiên bản Laravel được dự kiến release vào Q1 hàng năm.

Đối với tất cả các phiên bản Laravel, các bản fix bug đượ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.

image.png

Laravel 10 hỗ trợ PHP phiên bản 8.1-8.2 và không hỗ trợ 8.0.

Những cập nhật trong Laravel 10

1. Native Type Declarations

Trước version 10: sử dụng DocBlocks để làm rõ chức năng của một function và loại parameters hoặc response mong đợi.

Version 10:

Để đảm bảo được sự tương thích ngược của framework (breaking changes), các thuộc tính sẽ được áp dụng cho:

  • Dữ liệu trả về (return types)
  • Tham số của phương thức (method arguments)
  • Loại bỏ một số khai báo types không còn cần thiết ở docblock
  • Cho phép có thể khai báo ngay trong các tham số của closure

2. Invokable Validation rules sẽ là mặc định

Trước version 10: Nếu bạn muốn tạo Rule Invokable trong Laravel 9 phải thêm cờ –-invokable khi khai báo.

Version 10: Khi tạo Rule sẽ mặc định là Invokable

3. Hỗ trợ sửa cột cho CSDL

Nhằm loại bỏ dần nhu cầu sử dụng package doctrine/dbal, một tính năng mới đã được giới thiệu trong Laravel 10 cho phép các nhà phát triển sử dụng phương thức change() để sửa đổi các cột mà không cần các gói bổ sung.

Sử dụng phương thức change() để chỉnh sửa cột.

Ví dụ: Để sửa kiểu dữ liệu từ integer -> bigInt ta làm như sau

Note:

  • Cần thêm tất cả thuộc tính của cột khi thay đổi nếu không chúng sẽ bị loại bỏ.
  • Nếu đã cài đặt doctrine/dbal, nên khai báo phương thức Schema::useNativeSchemaOperationsIfPossible() trong App/Providers/AppServiceProvider để sử dụng tính năng này. Laravel sẽ ưu tiên nó trước khi sử dụng đến package và không hỗ trợ cho SQLite.

4. Hỗ trợ lấy ra Column Type

Tương tự change(), laravel 10 hỗ trợ phương thức Schema::getColumnType mà không cần đến doctrine/dbal.

5. Hỗ trợ phương thức whereExists() cho Eloquent ORM

Ở những phiên bản trước, việc sử dụng whereExists() cần sử dụng query lồng nhau.

Ở phiên bản 10, ta chỉ cần làm như sau:

6. Cập nhật SQL Server để sử dụng FETCH và OFFSET cho các query không bao gồm orderBy

Khi chúng ta viết 1 query như sau:

Laravel sẽ tạo câu lệnh SQL sử dụng FETCH và OFFSET:

Tuy nhiên, ở phiên bản trước, nếu loại bỏ orderBy khỏi truy vấn, nó sẽ quay trở lại phương thức bù trừ(offsetting) kết quả cũ:

Nhưng Laravel 10 sẽ sử dụng FETCHOFFSET ngay cả khi không có orderBy:

-> Cải thiện tốc độ truy vấn lên tới 33% và yêu cầu ít bước thực hiện hơn

7. Process Interaction

Process Interaction giúp việc thử nghiệm và chạy các quy trình CLI trở nên dễ dàng.

Process Interaction giúp chúng ta:

  • Xử lý đầu ra của process khi nhận được
  • Thiết lập Process không đồng bộ
  • Tạo ra nhóm các process
  • Các tính năng testing phong phú thông qua fake()
  • Ngăn chặn ngoại lệ trong quá trình testing

Process là một tính năng mới rất được đầu tư với nhiều phương thức và option được cung cấp. Bạn có thể tìm hiểu chi tiết ở docs về phần này của Laravel

8. Cung cấp 1 package mới – Laravel Pennant

Laravel Pennant cung cấp một cách tiếp cận gọn nhẹ, được sắp xếp hợp lý để quản lý các cờ tính năng của ứng dụng của bạn.

Nó cho phép chúng ra tự tin triển khai dần dần các tính năng ứng dụng mới, thử nghiệm các thiết kế giao diện mới.

Bạn có thể tìm hiểu chi tiết nó trong docs của Laravel 10.

9. Một số update nhỏ khác

  • Cung cấp Helper String::password() giúp tạo mật khẩu ngẫu nhiên, an toàn có độ dài nhất định. Mật khẩu theo mặc định sẽ gồm 32 ký tự với sự kết hợp của các chữ cái, số, ký hiệu và khoảng trắng. Chúng ta có thể custom lại với một số options:

  • Thuật toán mã hóa nhanh hơn: xxHash là một thuật toán Hash cực kỳ nhanh. Nó có tính ngẫu nhiên và phân tán đầu ra tuyệt vời, cũng như tính duy nhất để giảm va chạm. Vì PHP 8.1 cung cấp hỗ trợ cho xxh128 và vì Laravel 10 chạy trên PHP 8.1 nên việc có một thuật toán băm đáng tin cậy như vậy trong Laravel 10 là lý tưởng.
  • Cải thiện hiệu năng của Eager Loading.
  • PHPUnit 10 Support

Một số thứ bị loại bỏ

  • Loại bỏ phương thức handleDeprecation
  • Loại bỏ phương thức assertTimesSent
  • Loại bỏ thuộc tính ScheduleListCommand’s $defaultName
  • Loại bỏ phương thức Route::home
  • Loại bỏ phương thức dispatchNow
  • Loại bỏ phương thức getBaseQuery, có phương thức toBase tương tự
  • Class MaintenanceModeException
  • Trait MocksApplicationServices
  • Loại bỏ phương thức mail fake’s Mail::failures
  • Thuộc tính $dates(dùng $casts)
  • Loại bỏ phương thức assertTimesSent()

Tổng kết

Vừa rồi, chúng ta đã tìm hiể về một số thay đổi và cập nhật trong phiên bản Laravel 10.

Ngoài những thay đổi ở trên, vẫn còn một số thay đổi nhỏ nữa mà mình chưa đề cập tới hoặc chưa tìm hiểu ra. Các bạn hãy bổ sung cho mình ở phần comment nhé.

Cảm ơn mọi người đã đọc bài viết của mình. Hẹn gặp lại mọi người !

Tại liệu tham khảo: https://laravel.com/

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo