Có gì mới trong Laravel 10
Laravel 10 là phiên bản lớn tiếp theo của Laravel, theo kế hoạch sẽ được phát hành vào ngày 7 tháng 2 năm 2023. Trong bài viết này, chúng ta sẽ cùng xem qua tổng quan những điểm mới cũng như là sự thay đổi trong phiên bản lần này.
Vì thời điểm hiện tại, phiên bản mới này vẫn chưa được xuất bản, vì thế chúng tôi sẽ thường xuyên quay lại cập nhật bài này cho đến khi Laravel phát hành nó.
Ngày phát hành Laravel 10
Trước phiên bản Laravel 9, các phiên bản lớn của Laravel được phát hành 2 lần hoặc 6 tháng 1 lần. Kể từ phiên bản Laravel 9, core team đã chuyển lịch phát hành theo năm, phát hành bản Laravel 9 vào tháng 2 năm 2022 thay vì tháng 9 năm 2021 như kế hoạch ban đầu.
Laravel sử dụng một số packages cộng đồng trong đó có Symfony components, cho một vài tính năng của framework. Mà symfony 6.0 được phát hành vào tháng mười một. Đó cũng là lý do mà Laravel 9.0 dời lịch phát hành sang năm 2022.
Việc dời lịch phát hành, core team có thể nâng cấp các tính năng sử dụng bộ components của Symfony 6.0 mà không cần khoảng thời gian chờ từ tháng chín đến tháng mười một, kèm theo đó sẽ có khoảng thời gian thoải mái hơn cho các phiên bản hằng năm tiếp theo khi mà Laravel sẽ ra mắt sau Symfony 2 tháng.
Lịch phát hành dự kiến của Laravel ở các phiên bản sau:
- Laravel 9: Ngày 8, tháng 2, năm 2022
- Laravel 10: Ngày 7, tháng 2, năm 2023
- Laravel 11: Ngày 6 tháng 2, năm 2024
Laravel 9 vẫn sẽ tiếp tục nhận các bản vá lỗi cho đến ngày 8 tháng 8 năm 2023, và bản vá bảo mật cho đến ngày 6 tháng 2 năm 2024.
Và theo mong đợi, Laravel 10 sẽ nhận các bản vá lỗi cho đến ngày 6 tháng 8 năm 2024, và bản vá bảo mật cho đến ngày 4 tháng 2 năm 2025.
Proccess Layer
Process Layer sẽ giúp bạn testing và chạy các tiến trình CLI dễ dàng hơn:
use Illuminate\Support\Facades\Process;
$result = Process::run('ls -la');
$result->successful();
$result->failed();
$result->exitCode();
$result->output();
$result->errorOutput();
$result->throw();
$result->throwIf($condition);
Process Layer bao gồm nhiều tính năng hay ho, ví dụ như:
- Bạn có thể build 1 instance Process bằng nhiều phương thức chức năng trước khi chạy nó
- Có thể kiểm soát dữ liệu đầu ra
- Chạy bất đồng bộ các tiến trình
- Process Pools
- Hỗ trợ testing từ phương thức
fake()
- Ngăn việc processes chạy không đúng trong lúc tests
Giờ đây việc testing Process sẽ trở nên dễ dàng hơn rất nhiều.
Laravel 10 sẽ không còn hỗ trợ PHP 8.0
Phiên bản 10 này, Laravel framework sẽ không hỗ trợ phiên bản PHP <= 8.0
. Mà tối thiểu phiên bản PHP phải ^8.1
. Bạn có thể dùng tính năng so sánh sự thay đổi của 2 nhánh master và 9.x để xem các tính năng trong PHP 8.1 được Laravel sử dụng, tiêu biểu là readonly properties
.
Laravel 10 sẽ khai báo kiểu dữ liệu tiêu chuẩn trong toàn bộ skeleton app
Laravel 10 sẽ khai báo kiểu dữ liệu tiêu chuẩn trên khung sườn ứng dụng. Điều này có nghĩa các file khởi tạo ra từ Laravel sẽ được khai báo kiểu dữ liệu tiêu chuẩn cho tham số (type-hints) và dữ liệu trả về (return types) mặc định.
Để đảm bảo được sự tương thích ngược của framework (breaking changes), các thuộc tính sẽ không được khai báo kiểu dữ liệu, mà chỉ áp dụng sau:
- 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
Invokable Validation Rule sẽ là mặc định
Từ phiên bản 10, Invokable Validation Rule sẽ là mặc định khi bạn tạo từ lệnh artisan, xem ví dụ bên dưới.
# Laravel 9 sẽ tạo ra một class rule mới implements từ
# Illuminate\Contracts\Validation\Rule interface
artisan make:rule Uppercase
# Laravel 9 khi muốn tạo class rule invokable và implicit
artisan make:rule Uppercase --invokable
artisan make:rule Uppercase --invokable --implicit
# Laravel 10 mặc định sẽ tạo class invokable
artisan make:rule Uppercase
# Laravel 10 implicit rule
artisan make:rule Uppercase --implicit
Deprecations từ phiên bản Laravel 9
Một số phương thức được đánh dấu deprecated trong Laravel 9 sẽ được gỡ bỏ ở phiên bản Laravel 10. Các bạn hãy chuẩn bị trước, kiểm tra qua các phương thức này trong ứng dụng Laravel hiện tại, bao gồm cả các thay đổi từ các tham số, để khi Laravel 10 được phát hành, chúng ta sẽ nâng cấp nhanh và dễ dàng hơn từ hướng dẫn mà core team đưa ra.
Bạn có thể xem qua bằng công cụ so sánh Laravel framework nhánh master
và nhánh 9.x
, một số deprecations ngay lúc bài viết này:
- Gỡ bỏ một số deprecations tại Pull Request #41136
- Gỡ bỏ thuộc tính
$dates
trong Model tại Pull Request #42587 - Gỡ bỏ phương thức
handleDeprecation
tại Pull Request #42590 - Gỡ bỏ phương thức
assertTimesSent
tại Pull Request #42592 - Gỡ bỏ thuộc tính
$defaultName
trongScheduleListCommand
tại 419471e - Gỡ bỏ phương thức
Route::home
tại Pull Request #42614 - Gỡ bỏ phương thức/tính năng
dispatchNow
tại Pull Request #42591
Trải ghiệm thử Laravel 10
Giống như khởi tạo một project Laravel, bạn chỉ cần thêm option --dev
.
laravel new <your-project-name> --dev
Và còn nữa...
Laravel 10 chỉ còn vài tháng nữa sẽ ra mắt, và sẽ có những tính năng mới và thông báo mới được công bố. Chúng tôi sẽ tiếp tục cập nhật thông tin mới khi nhận được các thông tin ấy. Bạn cũng có thể tự kiểm tra tại trang official release để chủ động cập nhật các thông tin mới nhất từ Laravel khi chúng được sẵn sàng.